[英]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.