我有一个矩阵:
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)
,但它不起作用
答案 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
作为单个数字。
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;
答案 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]