我有一个如下所示的数组:
var array = [ [1,3,9],
[4,6,8],
[3,7,5],
[2,8,4] ];
我想获得每列的平均数,但现在我只是想对它们求和。这是我的代码:
var sum = function(arr) {
return arr.reduce(function(a, b) { return a + b; }, 0);
};
var tests = array.map(function(v, i) {
return sum(array.map(function(v) { return v[i]; }))
});
return tests;
输出正确地转换了总和,但它似乎在做与行(4 行)一样多的总和,而不是对应于列的 3 行。这是输出:
tests = [10, 24, 26, NULL]
知道为什么会这样吗?如何只对尽可能多的列而不是行执行计算?
编辑:
我正在使用 Nenad给出正确结果的答案。但我需要在 Google 表格的脚本编辑器上实现它,它似乎不理解带有“=>”的缩短功能。我用较长的版本替换了缩短的部分,但我没有得到相同的结果。
var array = [ [1,3,9],
[4,6,8],
[3,7,5],
[2,8,4] ];
var sums = array.reduce(function(r, e, i) {
e.forEach(function(a,j) { r[j] = (r[j] || 0) + a;
if (i == array.length-1) { r = r.map(function(el){ return el/array.length; }); }
});
return r;
}, [])
console.log(sums);
我看不出这个版本和简化版本有什么区别,但是这个版本返回:
sums = [0.15625, 0.75, 1.34375];
代替:
sums = [2.5, 6, 6.5];
求和正确,但是当我除“el/array.length”甚至“el/4”时,结果是这 3 个奇怪的数字。我不明白那些是从哪里来的。我哪里出错了?
最佳答案
您可以使用reduce()
和forEach()
返回结果。
var array = [
[1, 3, 9],
[4, 6, 8],
[3, 7, 5],
[2, 8, 4]
];
var sums = array.reduce(function(r, e, i) {
e.forEach((a, j) => r[j] = (r[j] || 0) + a)
return r;
}, [])
console.log(sums)
要计算每列的平均值,您可以在数组的最后一次迭代中添加 map()
。
var array = [
[1, 3, 9],
[4, 6, 8],
[3, 7, 5],
[2, 8, 4]
];
var sums = array.reduce(function(r, e, i) {
e.forEach((a, j) => r[j] = (r[j] || 0) + a)
if (i == array.length - 1) r = r.map(el => el / array.length);
return r;
}, [])
console.log(sums)
关于javascript - 使用 array.map() 计算二维数组列的平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41667034/