假设我有一个数组数组,如下所示:
[ [0, 1, 3], [2, 4, 6], [5, 5, 7], [10, 0, 3] ]
如何生成一个新数组,该数组在javascript中对内部数组的每个位置的所有值求和?在这种情况下,结果将是:[17,19,19].无论内部数组的长度如何,我都需要能够提供一个有效的解决方案.我认为这可以使用map和for-of的一些组合,或者可能减少,但我不能完全围绕它.我搜索过但找不到任何与此相符的例子.
你可以Array.prototype.reduce()
结合使用Array.prototype.forEach()
.
var array = [
[0, 1, 3],
[2, 4, 6],
[5, 5, 7],
[10, 0, 3]
],
result = array.reduce(function (r, a) {
a.forEach(function (b, i) {
r[i] = (r[i] || 0) + b;
});
return r;
}, []);
document.write('' + JSON.stringify(result, 0, 4) + '
');
使用Lodash 4:
function sum_columns(data) {
return _.map(_.unzip(data), _.sum);
}
var result = sum_columns([
[1, 2],
[4, 8, 16],
[32]
]);
console.log(JSON.stringify(result));
在一衬ES6
,与map
和reduce
var a = [ [0, 1, 3], [2, 4, 6], [5, 5, 7], [10, 0, 3] ];
var sum = a[0].map((_, i) => a.reduce((p, _, j) => p + a[j][i], 0));
document.write(sum);