如果有多个数组,如
[100, 43, 76, 95, 62],
[27, 54, 99, 13, 56],
[56, 92, 01, 46, 87]
使用每个索引的平均值获得一个数组的最简单方法是什么? 我有一个动态数量的数组,但每个都有6个项目。
(例如,上面数组的平均值为[61, 63, 59, 51, 68]
答案 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;
如果你有一些dymanic数组的数组,那么这就像一个魅力,
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;
答案 1 :(得分:1)
Array#map其中一个子数组,并使用Array#reduce获取每列的总和。然后将总和除以子数组:
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;
答案 2 :(得分:0)
您可以通过以下方式执行此操作
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;
答案 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);