二维数组求和

时间:2017-06-23 18:28:12

标签: javascript arrays loops for-loop

我有一个矩阵:

matrix = [[0, 1, 1, 2],
          [0, 5, 0, 0],
          [2, 0, 3, 3]]

我需要计算所有不小于0的数组元素的总和  所以,在这个例子中,Sum应该是= 9

我有这个功能:

function matrixElementsSum(matrix) {
  // Write your code here
 var Summa =0
  for (i = 0; i<4; i++){
      var sum =0;
    // console.log(matrix[i].length); //4
    for(j=0; j<matrix.length; j++){
      console.log("Matrix JI "+ matrix[j][i])
         sum = sum +matrix[j][i]; 
         if (matrix[j][i-1]!=0){
           console.log(matrix[j][i-1])
           Summa =Summa+ sum;
         }
    }
    console.log('-----------' +Summa)
    console.log("Sum "+sum);
  }

  return Summa;
}

我想我需要改变if (matrix[j-1][i]!=0),但它不起作用

4 个答案:

答案 0 :(得分:2)

您可以使用reduce()forEach()圈内。如果foreach循环中的当前元素为零,那么您可以将该元素的索引存储在另一个对象zero中,并且可以使用该对象检查是否存在具有相同索引的零。

var matrix = [
  [0, 1, 1, 2],
  [0, 5, 0, 0],
  [2, 0, 3, 3]
]

var zero = {}
var sum = matrix.reduce(function(r, e, i) {
  e.forEach(function(n, j) {
    if (n == 0) zero[j] = true;
    if (!zero[j]) r += n;
  })
  return r;
}, 0)

console.log(sum)

答案 1 :(得分:1)

您可以将2个数组相加并忽略底部数组中的数字,顶部数组中相同索引的项目为0.

现在你可以从末尾迭代矩阵,并对得到的数组求和。

<FilesMatch ".(eot|ttf|otf|woff)">
    Header set Access-Control-Allow-Origin "*"
</FilesMatch>

答案 2 :(得分:1)

您可以使用Array#reduceRight构建具有有价值列数的另一个数组,然后使用Array#reduce作为单个数字。

&#13;
&#13;
var matrix = [[0, 1, 1, 2], [0, 5, 0, 0], [2, 0, 3, 3]],
    result = matrix.reduceRight(function (a, b) {
        return b.map(function (c, i) {
            return c && c + a[i];
        });
    }).reduce(function (a, b) {
        return a + b;
    });

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

答案 3 :(得分:0)

应该能够简化并使用它:

function matrixElementsSum(matrix) {
    var Summa =0
    for (i = 0; i < matrix.length; i++)
      for(j = 0; j < matrix[i].length; j++)
         if (matrix[i-1][j] != 0)
           Summa = Summa + matrix[i][j];

    return Summa;
}

您需要首先访问当前数组之上的数组,因此matrix[i-1]然后是同一列,因此[j]中的(matrix[i-1])[j] ~ matrix[i-1][j]