在矩阵中添加数字

时间:2018-06-20 09:11:06

标签: javascript matrix

我有一个二维数组,我想对该数组中的所有值求和,其中值不是-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])); 我在这里说错误不是函数

2 个答案:

答案 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);