给定多维数组:
var a = [[3,2,5], [4,1,7], [1,6,8]];
我想对每个数组做一个累加和以返回以下结果:
[[3,2,5], [7,3,12], [8,9,20]];
我尝试使用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;
}
}
}
很高兴看到使其更轻巧的其他方法和方式。
最佳答案
for (var i=1; i<a.length; i++) {
for (var z=0; z<a[i].length; z++) {
a[i][z] = a[i-1]][z] + a[i][z]
}
}
循环运行时,应动态更新阵列。
这是破坏性的,因此它将修改原始数组。