给定多维数组:

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
  • 每个子数组的第3个元素的总和: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;
                    }
                }
            }
    

    很高兴看到使其更轻巧的其他方法和方式。

    最佳答案

    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]
      }
    }
    

    循环运行时,应动态更新阵列。
    这是破坏性的,因此它将修改原始数组。

    10-06 14:00
    查看更多