我如何总结二维数组,ex index 0 + index0

时间:2016-02-03 14:39:13

标签: javascript

我遇到了一个问题! 例如!这是我的二维数组:var array=[[1,2,3,4],[2,3,4,5],[3,4,5,6]]; 我期望的结果是:[[1,2,3,4],[2,3,4,5],[3,4,5,6],[6,9,12,15]]

[6,9,12,15]来自添加前面内部数组的相同索引号。 (ex 1+2+3, 2+3+4, 3+4+5, 4+5+6更明确:index 1 + index 1+ index1 produces 9

到目前为止我很困惑,我所做的关闭是总结[1,2,3,4][2,3,4,5][3,4,5,6],但我似乎无法对每个和个别数字做点什么:(

问题要求我做嵌套for循环,所以我不能使用任何东西,如reduce,map,flatten等......

7 个答案:

答案 0 :(得分:0)

迭代外部数组和内部数组,并将值添加到结果数组array[3]

var array = [[1, 2, 3, 4], [2, 3, 4, 5], [3, 4, 5, 6]];

array.forEach(function (a) {
    a.forEach(function (b, i) {
        array[3] = array[3] || [];
        array[3][i] = (array[3][i] || 0) + b;
    });
});

document.write('<pre>' + JSON.stringify(array, 0, 4) + '</pre>');

答案 1 :(得分:0)

https://jsfiddle.net/0L0h7cat/

var array = [
  [1, 2, 3, 4],
  [2, 3, 4, 5],
  [3, 4, 5, 6]
];
var sumArr = [];

for (var i = 0; i < array[0].length; i++) {
  sumArr[i] = 0;
  for (var j = 0; j < array.length; j++)
    sumArr[i] += array[j][i];
}

array.push(sumArr);

答案 2 :(得分:0)

这就是 -

&#13;
&#13;
    var array=[[1,2,3,4],[2,3,4,5],[3,4,5,6]];
    var array2=[]
    for (var i = array[0].length;i--;) {
        var sum=0;
        for (var j = array.length; j--;) {
            sum=sum+array[j][i];
        }
     array2.push(sum)
}

array.push(array2.reverse());

document.write('<pre>'+JSON.stringify(array) + '</pre>');

  
&#13;
&#13;
&#13;

但我确信有更优雅的方法。我自己就是通过回答问题来学习。

答案 3 :(得分:0)

如果您对Arrow Functions感兴趣,可以使用: -

&#13;
&#13;
var array = [[1, 2, 3, 4],[2, 3, 4, 5],[3, 4, 5, 6]];

var count = [];
array.forEach(x => x.forEach((y, i) => count[i] = (count[i] || 0) + y));
array.push(count);

console.log(array);
&#13;
&#13;
&#13;

注意:尚未跨浏览器支持。

答案 4 :(得分:0)

尝试这种方式:https://jsfiddle.net/0L0h7cat/

var array=[[1,2,3,4],[2,3,4,5],[3,4,5,6]];
    var array4 = [];
    for (j = 0; j < array[0].length; j++) {
    var num =0;
     for(i=0;i< array.length;i++){
    num += array[i][j];
    }
    array4.push(num);
    }
    array.push(array4);
    alert(array);

答案 5 :(得分:0)

仅使用传统for循环的简单方法

var input = [[1,2,3,4],[2,3,4,5],[3,4,5,6]];
    
function getSumOfArrayOfArrays(inputArray) {
  var length = inputArray.length;
  var result = [];
  for(var i=0; i<length; i++){
    for(var j=0; j<=3; j++){
      result[j] = result[j] ? result[j] + inputArray[i][j] : inputArray[i][j];
    }
  }
  return result;
}

var output = getSumOfArrayOfArrays(input); // [6,9,12,15]

var desiredOutput = input;
desiredOutput.push(output)

document.write(JSON.stringify(desiredOutput));

// [[1,2,3,4],[2,3,4,5],[3,4,5,6],[6,9,12,15]]

答案 6 :(得分:0)

我尽量避免编写嵌套for循环。

&#13;
&#13;
var arrayOfArrays=[
    [1,2,3,4],
    [2,3,4,5],
    [3,4,5,6]
];

//define a function to extend the Array prototype
Array.prototype.add = function(otherArray){
    var result = [];
    
    for(var i = 0; i < this.length; i++) {
        result.push( this[i] + otherArray[i] )
    }

    return result;
};

//reduce array of arrays to get the result array `sum`
var sum = arrayOfArrays.reduce(function(arrayA, arrayB){
    //`arrayA`+`arrayB` becomes another `arrayA`
    return arrayA.add(arrayB)
});

//put `sum` back to `arrayOfArrays`
arrayOfArrays.push(sum);

document.write('<pre>' + JSON.stringify(arrayOfArrays) + '</pre>');
&#13;
&#13;
&#13;