在 JavaScript 中分别计算每个子数组的平均值,然后返回所有平均值的总和
在给定的问题陈述中,我们被要求分别计算每个子数组的平均值,然后借助 JavaScript 功能返回所有平均值的总和。当我们讨论子数组的平均值时,我们可以使用 JavaScript 的 Reduce 方法。
JavaScript 中的 Reduce() 方法是什么?
让我们了解 JavaScript 中 Reduce 函数的工作原理。
在 JavaScript 中,Reduce 方法用于通过迭代数组的每个项目将数组缩减为单个值。并通过应用根据每次迭代的结果累积值的回调函数。Reduce 方法基本上采用两个参数。一个累加器和一个当前值。
累加器是上一次迭代的累积值或传递给 Reducer 函数的初始值。当前值是数组中正在处理的当前元素。
以下是在 JavaScript 中定义列表的语法:−
const arr = [1, 2, 3, 4, 5]; const sum = arr.reduce((acc, val) => acc + val, 0); console.log(sum);
输出
15
给定问题的逻辑
在给定的问题陈述中,我们将找到每个子数组的平均值,然后返回所有平均值的总和。为了实现该算法,我们需要通过遍历数组并使用 Reduce 方法获取每个子数组中元素的总和来分别计算每个子数组的平均值,然后将其除以子数组的长度。
算法
步骤 1 − 步骤 1:声明一个名为 sumOfAverages 的函数,以元素子数组作为输入。
步骤 2 − 步骤 1:声明一个名为 sumOfAverages 的函数,以元素子数组作为输入。
步骤 3 − 现在必须定义一个 for 循环以遍历子数组的每个元素。使用循环内的 Reduce 方法获取子数组中每个元素的平均值。
步骤 4 − 此步骤将计算所有平均值的总和。
步骤 5 − 在最后一步中,将结果返回为总和。
示例
// 声明一个用于获取平均值的函数 function sumOfAverages(arr) { var sum = 0; for (let subArr of arr) { var avg = subArr.reduce((acc, val) => acc + val) / subArr.length; sum += avg; } return sum; } const arr = [[1, 2, 3], [4, 5], [6, 7, 8, 9]]; const result = sumOfAverages(arr); console.log(result);
输出
14
复杂性
每当我们谈论时间复杂性时,它都是以执行特定函数以获得结果所花费的时间来衡量的。
在我们的例子中,我们最初在函数中使用了一个 for 循环来遍历数组的长度。因此,for 循环所花费的时间为 O(n^2) 时间来迭代数组中的每个子数组。它还使用 Reduce 函数来获取每个数组中元素的总和。Reduce 函数本身需要 O(n) 时间来执行。其中 n 是子数组的长度。
如果我们谈论空间复杂性,那么这个函数将占用 O1) 内存空间,因为该函数使用恒定数量的额外内存来存储总和和平均值。
结论
在 JavaScript 中计算子数组的平均值和总和的最直接和可靠的方法。正如我们在上面的实现中看到的,函数 sumOfAverages 分别计算每个子数组的平均值并返回所有平均值的总和。它的时间复杂度为 O(n^2),空间复杂度为 O(1)。此函数可能适用于小型输入数组,但由于其时间复杂度高,对于大型输入数组可能效率不高。