给定一个多维数组:的多维数组累积和在Javascript
var a = [[3,2,5], [4,1,7], [1,6,8]];
我愿做每个阵列返回以下结果的累加值:
[[3,2,5], [7,3,12], [8,9,20]];
- 每个子阵列的第一个元素的总和:3 4 1
- 每个子阵列的第二个元素的总和:2 1 6
- 兼总和每个子阵列的第三个元素:5 7 8
我试过使用reduce(),但不能完全得到预期的结果。
任何建议,非常感谢。
小号
更新 - 把它带到一个新的水平:
var a = [
[new Date(), 3,2,5],
[new Date(), null,1,7],
[new Date(), null,6,8],
[new Date(), 1,2,3]
];
应导致:
[[new Date(), 3,2,5],
[new Date(), null,3,12],
[new Date(), null,9,20],
[new Date(), 4,11,23]]
我的方法是创建一个多维offsetIndex阵列:
var offsetIdx = [];
for (var i=1; i<a.length; i++) {
for (var z=0; z<a[i].length; z++) {
var zValue = a[i][z];
oIdx = offsetIdx[z] || 0;
a[i][z] = zValue && z!==0 ? a[i-1-oIdx][z] + zValue : zValue;
if(!zValue){
offsetIdx[z] = oIdx + 1;
} else {
offsetIdx[z] = 0;
}
}
}
很高兴看到使其超轻量级的其他方法和途径。
它是如何,您的输出阵列可以具有相同数量的元素,因为总和将被应用到输入? –
@NewAlexandria:当他进入每个数组时,他积累了结果,所以第一个数组不变,第二个是第一个加上自身的总和(分别为每个成员),第三个是结果的总和第二,加上自己的成员,等等。 –
正确。当它传递给前一个元素的引用时,我倾向于reduce()函数。我已经看到了平面1个暗淡阵列的例子,但不能完全适应它以适应多暗淡阵列。 – Seb