簡體   English   中英

在JavaScript中將兩個2d數組加在一起

[英]adding together two 2d arrays in javascript

我在二維數組方面遇到這個問題。 我們必須創建一個JavaScript函數addArrays(al,a2),該函數接受兩個2d數字數組a1和a2,並以矩陣和的形式返回其“和”。 如果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不是一個函數

錯誤:TypeError:addArrays(...)。toSource不是一個函數

意味着它無法在addArrays返回的addArrays找到toSource函數。 Object.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 );
  }}

對於相同大小的數組,您可以發明一些Array方法,例如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數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM