获取数组中每组 n 个元素的平均值 JavaScript

javascriptweb developmentfront end technologyobject oriented programming

在给定的问题中,我们必须找出数组中每组 n 个元素的平均值。如果数组中有 m 个元素,则计算每组的平均值并以数组形式显示结果。

理解问题

假设数组中有 6 个元素,并将 2 个元素组成一组。现在分别计算每组的平均值。现在我们有了它们的平均值,我们可以将它们组合成一个数组。

为了实现这个问题,我们使用了 reduce()、push() 和 split()。这些是 javascript 中的预定义方法。

reduce() 函数将对数组的每个元素运行一个 Reducer 函数并给出一个输出值。reduce() 函数的语法是:

array.reduce(callbackFunction(currentValue, currentIndex), initialValue)

push() 函数用于将所有元素推送到数组中。它在最后一个索引处向数组添加一个新项。它还会更改数组的大小。"push()"的语法如下:

输入

colors = ["Red", "Blue", "Black"];
colors.push("Pink","Grey");

输出

[ 'Red', 'Blue', 'Black', 'Pink', 'Grey' ]

slice() 函数通过对数组中的选定项进行切片,将其作为新数组返回。此函数的机制是从提到的起点到终点选择元素。此函数的属性,它不会更改实际数组。语法如下:

输入

colors = ["Red", "Blue", "Black", "Pink", "Grey"];
color = colors.slice(1,3);

输出

[ 'Blue', 'Black' ]

算法 - 使用切片、减少和推送函数

步骤 1:为了解决这个问题,声明一个名为 groupAverage 的函数,该函数以整数数组作为输入。

步骤 2:声明函数后,我们需要声明一个数组来存储元素,并将其命名为 result,值为 0(初始化为空)。

步骤 3:从 for 循环开始,可以遍历整数元素的每个字符,直到 array.length。

步骤 4:现在这是我们将创建一组元素并将它们分配给批处理的主要步骤变量。

步骤 5:此步骤将确定我们创建的每个组的平均值。因此,为此,我们将每个组的组成部分相加,计算它们的平均值,并为 avg 变量赋值。

步骤 6:现在,在此路径中,计算出的平均值将被添加或推送到结果数组中。

步骤 7:计算每个组的平均值后给出结果。获得平均值后,我们需要将它们推送到新数组中。因此结果将是数组的数组。

示例

//定义一个函数来计算平均值
function groupAverage (a, n) {
  var result = [];

  for (let i = 0; i < a.length; i =i+n) {
   var batch = a.slice(i, i + n);
   var avg = batch.reduce((sum, b) => sum + b, 0) / batch.length;
   result.push(avg);
  }

  return result;
}
//定义数组和数字来计算组的平均值
var arr = [11, 21, 31, 41, 51, 61, 71, 81, 91];
var num = 3;

// 调用函数并将其存储在结果中
var output = groupAverage(arr, num);
console.log("数组中每组 n 个元素的平均值")
console.log(output);

输出

数组中每组 n 个元素的平均值
[ 21, 51, 81 ]

在上面的代码中,我们定义了一个名为 groupAverage() 的函数,它接受两个参数:一个数组"a"和一个数字"n"。使用 for 循环迭代数组的元素,每一步增加 n。

在循环中,将数组从当前索引切分为 n 个元素,并将结果添加到名为 group 的变量中。通过对组调用 javascript 函数 reduce() 并除以其长度来计算组的平均值,并将结果分配给名为 avg 的变量。现在将 avg 值推送到结果数组。然后返回并显示函数的结果。

算法 - 使用两个 for 循环

步骤 1:第一步,定义包含一些值的数组。

步骤 2:创建一个函数并将其命名为 groupAvg()。该函数接受两个参数 array 和 num。其中 num 是单个组中元素的数量,array 是我们在第一步中定义的变量。

步骤 3:第二步之后定义一个数组来存储结果。

步骤 4:定义一个 for 循环,运行到数组的长度。同时初始化一个 sum 变量,初始值为 0。

步骤 5:在此步骤中,再声明一个 for 循环,它将迭代组元素。

步骤 6:在此阶段确定值是否为数字。如果没有数值,则将默认值设置为 0。

步骤 7:在结果数组中添加各组的平均值。

步骤 8:最后一步,打印输出并返回结果值。

示例

//声明一个名为 array 的数组
const array = [2, 1, 5, 4, 1, 3, 6, 7, 9];

//用于计算组平均值的函数
function groupAvg(array, num) {
  var result = [];
  for (let i = 0; i < array.length;) {
   var sum = 0;
   for(let j = 0; j< num; j++){
     sum += +array[i++] || 0
   }
   result.push(sum/num);
  }
  return result
}

console.log("3 项和 2 项的组平均值分别为: ")
console.log(groupAvg(array, 3))
console.log(groupAvg(array, 2))

输出

3 项和 2 项的组平均值分别为:
[ 2.666666666665, 2.666666666666665, 7.33333333333333 ]
[ 1.5, 4.5, 2, 6.5, 4.5 ]

复杂性

从上面的实现中我们可以看出,使用了 for 循环来实现所需的结果。现在我们发现 groupCount() 仅适用于对象中存在的项目数量。时间复杂度为 O (n)。其中 n 表示传入数据的大小。此外,由于 total 函数在组对象中为每个堆栈保留一个计数值,因此程序需要相同的内存量,即 O(n)。

结论

该算法给出了有关使用slice()、reduce() 和 push() 函数的基本思想。该算法的时间复杂度为 O(N)。借助这个问题,我们将了解如何对数组中的分组元素进行切片和计算平均值。这就是我们解决给定问题的方法。它将以更少的时间复杂度和空间复杂度提高逻辑思维和编码技能。


相关文章