在javascript中将两个2d数组加在一起

时间:2016-06-03 14:52:14

标签: javascript arrays multidimensional-array

我遇到有关2d数组的问题。我们必须创建一个javascript函数addArrays(al,a2),它接收两个2d数字数组a1和a2并返回它们的" sum"在矩阵和的意义上。如果a是具有和的数组,则对于所有行i和所有列j,a [i] [j] = a1 [i] [j] + a2 [i] [j]。

我完全被难以理解我很确定我找到总和的逻辑是正确的,但我不知道是否有任何实际存储在sum数组中或者这个错误意味着什么。任何帮助将不胜感激。

这是我到目前为止的代码:

var sum = new Array(a1.length);
for (var k = 0; k<sum.length; k++) {
    sum[k] = new Array(sum.length);
}

for (var l = 0; l<sum.length; l++) {
    for (var m = 0; m<sum.length[l]; m++) {
        sum[l][m].push(a1[l][m] + a2[l][m]);
    }
}

return sum;

我们获得了一个测试文件:

 function start() {  
  var ar1 = [[1,2], [3,4]],
  ar11 = [[1,2], [3,4], [5,6]],
  ar12 = [[1,2,3], [3,4]],

  ar2 = [[6,7], [8,9]],
  ar21 = [[6,7], [8,9], [19,11]],
  ar22 = [[6,7], [8,9,10]],

  ar;

  try {
     alert( addArrays(ar1, ar2).toSource() );
  }
  catch (e) {
      alert( e );
  }}

当我运行程序时,我不断收到错误:  TypeError:addArrays(...)。toSource不是函数

2 个答案:

答案 0 :(得分:2)

  

错误:TypeError:addArrays(...)。toSource不是函数

表示无法在toSource返回的beign上找到函数addArraysObject.toSource不属于任何标准,不应使用。

来自MDN

  

非标准
  此功能是非标准的,不符合标准   跟踪。不要在面向Web的生产站点上使用它:它不会   为每个用户工作。两者之间可能存在很大的不兼容性   实现和行为可能在未来发生变化。

查看toSource的输出,它看起来与JSON类似。您可以更改测试以使用JSON.stringify来获得类似的输出。

 function start() {  
  var ar1 = [[1,2], [3,4]],
  ar11 = [[1,2], [3,4], [5,6]],
  ar12 = [[1,2,3], [3,4]],

  ar2 = [[6,7], [8,9]],
  ar21 = [[6,7], [8,9], [19,11]],
  ar22 = [[6,7], [8,9,10]],

  ar;

  try {
     alert( JSON.stringify(addArrays(ar1, ar2)) );
  }
  catch (e) {
      alert( e );
  }}

答案 1 :(得分:1)

对于相同大小的数组,您可以创建一些像Array.prototype.matriceSum()这样的数组方法,如下所示;

Array.prototype.matriceSum = function(a) {
  return this.reduce((p,c,i) => (p[i] = c.reduce((f,s,j) => (f[j]+= s,f),p[i]),p),a.slice());
};
var a1 = [[1,2,3],[2,2,2],[4,5,6]],
    a2 = [[6,6,6],[9,8,7],[6,5,4]];
    a3 = a1.matriceSum(a2);
console.log(JSON.stringify(a3));

这不会改变它所调用的数组并返回一个新的2D数组,其中添加了两个2D数组的矩阵。