在javascript中平均整数数组的最简单方法是什么?

时间:2017-09-12 12:16:55

标签: javascript arrays

如果有多个数组,如

[100, 43, 76, 95, 62],
[27, 54, 99, 13, 56],
[56, 92, 01, 46, 87]

使用每个索引的平均值获得一个数组的最简单方法是什么? 我有一个动态数量的数组,但每个都有6个项目。

(例如,上面数组的平均值为[61, 63, 59, 51, 68]

5 个答案:

答案 0 :(得分:3)

你只需要一个循环来获取三个数组的相同索引的元素并计算平均值:



var arr1 = [100, 43, 76, 95, 62];
var arr2 = [27, 54, 99, 13, 56];
var arr3 = [56, 92, 01, 46, 87];
var res = [];
for(var i=0; i<arr1.length; i++){
  var avg = Math.round((arr1[i]+ arr2[i]+ arr3[i])/3)
  res.push(avg);
}

console.log(res);
&#13;
&#13;
&#13;

如果你有一些dymanic数组的数组,那么这就像一个魅力,

&#13;
&#13;
var data = [[100, 43, 76, 95, 62],[27, 54, 99, 13, 56],[56, 92, 01, 46, 87]];
var res = [], sum;
for(var i=0; i<data[0].length; i++){
  sum = 0;
  for(var j=0; j<data.length; j++){
     sum+= data[j][i];
  }
  res.push(Math.round(sum/data.length));
}
console.log(res);
&#13;
&#13;
&#13;

答案 1 :(得分:1)

Array#map其中一个子数组,并使用Array#reduce获取每列的总和。然后将总和除以子数组:

&#13;
&#13;
const arr = [
  [100, 43, 76, 95, 62],
  [27, 54, 99, 13, 56],
  [56, 92, 01, 46, 87]
];

const result = arr[0].map((item, index) => 
  Math.round(arr.reduce((avg, sArr) => avg + sArr[index], 0) / arr.length)
);

console.log(result);
&#13;
&#13;
&#13;

答案 2 :(得分:0)

您可以通过以下方式执行此操作

&#13;
&#13;
let arr = [
    [100, 43, 76, 95, 62],
    [27, 54, 99, 13, 56],
    [56, 92, 01, 46, 87]
    ];

let ans = arr.reduce((a, b) => {
    return a.map((x, i) => x+b[i]);
}).map(a => Math.round(a/arr.length));

console.log(ans);
&#13;
&#13;
&#13;

答案 3 :(得分:0)

首先,您的数据结构并不理想。可以先“旋转”矩阵:

 const arr = [
   [100, 43, 76, 95, 62],
   [27, 54, 99, 13, 56],
   [56, 92, 01, 46, 87]
];

const rotated = arr[0].map((_,i)=> arr.map(row=>row[i]));

然后,您可以轻松地总结行并将它们划分为长度:

const result = rotated.map(
  row => row.reduce((a,b) => a+b ,0)/row.length
);

答案 4 :(得分:0)

您可以在同一索引处对所有值求和,然后计算平均值。

var array = [[100, 43, 76, 95, 62], [27, 54, 99, 13, 56], [56, 92, 01, 46, 87]],
    result = array
        .reduce(function (r, a) {
            a.forEach(function (b, i) {
                r[i] = (r[i] || 0) + b;
            });
            return r;
        }, [])
        .map(function (a, i) {
            return Math.round(a / array.length);
        });

console.log(result);