[英]Sum in 2-dimensional array
我有一个矩阵:
matrix = [[0, 1, 1, 2],
[0, 5, 0, 0],
[2, 0, 3, 3]]
我需要计算不小于0的所有数组元素的总和,因此,在此示例中,总和应为= 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)
但是它不起作用
您可以为此使用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)
您可以对2个数组求和,而忽略底部数组中的数字,顶部数组中相同索引的项为0。
现在,您可以从末尾迭代矩阵,并对结果数组求和。
const matrix = [[0, 1, 1, 2], [0, 5, 0, 0], [2, 0, 3, 3]]; const sumNotUnderZero = (bottom, top) => top.map((v, i) => v ? v + bottom[i] : v); const result = matrix.reduceRight(sumNotUnderZero) .reduce((s, n) => s + n); console.log(result);
您可以使用Array#reduceRight
构建具有值列总和的另一个数组,然后对单个数字使用Array#reduce
。
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);
应该能够简化并使用它:
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]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.