【发布时间】:2017-05-30 17:44:41
【问题描述】:
我有一个如下所示的数组:
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 的答案,它给出了正确的结果。但我需要在谷歌表格的脚本编辑器上实现它,它似乎不理解带有“=>”的缩短函数。我用更长的版本替换了缩短的部分,但我没有得到相同的结果。
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个奇怪的数字。我不明白那些来自哪里。我哪里做错了?
【问题讨论】:
标签: javascript arrays multidimensional-array google-sheets