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

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

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

理解问题

假设数组中有6个元素,将其分为每组2个元素。现在分别计算每组的平均值。现在,我们已经得到了它们的平均值,可以将它们合并到一个单独的数组中。

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

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

reduce()函数将在数组的每个元素上运行一个缩减函数,并给出一个单一的输出值。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' ]

步骤-使用切片、reduce和push函数

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

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

步骤3 : 通过for循环遍历整个整数数组的每个字符,直到数组的长度。

步骤4 : 现在,这是主要的一步,我们将创建一个元素组,并将它们赋值给batch变量。

步骤5 : 这一步将确定我们创建的每组的平均值。因此,为了做到这一点,我们将每组的元素相加,计算它们的平均值,并给avg变量赋一个值。

步骤6 : 现在,在这个路径中,计算得到的平均值将被添加或推送到result数组中。

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

示例

//Define a function to calculate average
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;
}
//Define array and number to calculate average of groups
var arr = [11, 21, 31, 41, 51, 61, 71, 81, 91];
var num = 3;

// Calling the function and store it in result
var output = groupAverage(arr, num);
console.log("Average of every group of n elements in an array")
console.log(output);

输出

Average of every group of n elements in an array
[ 21, 51, 81 ]

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

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

步骤 – 使用两个for循环

步骤1 :首先,在数组中定义一些值。

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

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

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

步骤5 :在这一步中,声明另一个for循环,用于迭代组中的元素。

步骤6 :在这个阶段判断值是否为数字。如果没有数值,则将默认值设置为0。

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

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

示例

//Declare an array with name array
const array = [2, 1, 5, 4, 1, 3, 6, 7, 9];

//Function to calculate Average of groups 
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("Group average for 3 and 2 items respectively: ")
console.log(groupAvg(array, 3)) 
console.log(groupAvg(array, 2))

输出

Group average for 3 and 2 items respectively: 
[ 2.666666666665, 2.666666666666665, 7.33333333333333 ]
[ 1.5, 4.5, 2, 6.5, 4.5 ]

复杂性

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

结论

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

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程