我有一个二维数组,我想对该数组中的所有值求和,其中值不是-1。 假设我有一个具有以下值的矩阵:
0,1 = 1.68
1,2 = 1.74
2,0 = 1.61
3,4 = -1
...
我要添加所有非-1的数字
我尝试过的并且显然对我不起作用的是:
for(i=0; i<data.length; ++i) {
for(j=0; j<data.length; ++j) {
if(data[i][j] != -1) {
sum += data[i][j]+data[j][i]
}
}
}
在我的情况下,如果索引(n,m)= k,那么索引(m,n)= k也是正确的。
因此,例如,如果(n,m)= 1.74,则(m,n)= 1.74。这就是为什么我需要在上面的代码中进行data[i][j]+data[j][i]
我真正想要的结果是:sum = (0,1 + 1,0) + (1,2 + 2,0) + (2,0 + 0,2) => sum = 2*(1,68) + 2*(1,74) + 2*(1,68)
从上面的代码中得到的结果是不确定的。
我尝试了使用.map(...)的替代解决方案,根据该文档,它具有映射功能。但是就目前而言,使用双数组对我来说有点太复杂了(我还没有经验丰富的程序员)
data.map((a,i) => a.map((n,j) => n+data[i][j]));
我在这里说错误不是函数
答案 0 :(得分:1)
您可以使用嵌套的reduce
const data = [];
var dt = [1,2,3]
data[0] = dt;
data[1] = dt;
data[2] = dt;
var total = data.reduce((n,arr)=> n+arr.reduce((n,val)=>n+val), 0);
console.log(total);
答案 1 :(得分:1)
我想您想对一个方阵中的所有值求和。因此,即使矩阵中的(m,n)=(n,m),求和的一种简单方法是:
let sum = 0;
for (let i = 0; i < data.length; i++) {
for (let j = 0; j < data.length; j++) {
if (data[i][j] !== -1) sum += data[i][j];
}
}
console.log(sum);
但是,如果您要进行一些计算时考虑到矩阵中(m,n)=(n,m)的事实,则可以尝试以下操作:
let sum = 0;
for (let i = 0; i < data.length; i++) {
for (let j = 0; j < data.length; j++) {
if (data[i][j] !== -1) {
if (i === j) sum += data[i][j];
if (j < i) sum += 2*data[i][j];
}
}
}
console.log(sum);