我想寫一個相當簡單的Javascript函數,並體驗行爲我不明白當我迭代函數。問題與調用一個JavaScript函數兩次
我已將問題歸結爲以下情況。我想編寫一個函數,它將輸入一個由數組數組組成的數組,例如, A = [[[1]]]
。我不知道這個標準術語,所以我將把主數組稱爲「級別0」,其中的元素是「級別1」的數組。我會說1級數組由「級別2」的數組組成。 2級數組由整數組成。
功能將執行以下操作,輸入A
(0級陣列):
- 創建一個空數組
L
; - 爲每個級別1陣列
M
在A
- 添加一個到每個級別2陣列中
M
在每個整數條目; - 加
M
兩個拷貝到L
- 添加一個到每個級別2陣列中
- 回報
L
。
這裏是我的代碼:
function myFunc(A){
var L = [];
for(var a=0; a<A.length; a++){
var M = A[a].slice(0);
for(var i=0; i<M.length; i++){
for(var j=0; j<M[i].length; j++){
M[i][j]++;
}
}
for(var s=0; s<2; s++){
var N = M.slice(0);
L.push(N);
}
}
return(L);
}
現在我測試一下:
var A = [[[1]]];
A = myFunc(A)
在此之後,我得到A = [[[2]],[[2]]]
,這是我的期望。然而,假設我遍歷它:
var A = [[[1]]];
A = myFunc(A);
A = myFunc(A);
然後我希望能獲得A = [[[3]],[[3]],[[3]],[[3]]]
,而是我有A = [[[4]],[[4]],[[4]],[[4]]]
。
另一方面,如果我運行myFunc([[[2]],[[2]]])
,我確實得到了預期的[[[3]],[[3]],[[3]],[[3]]]
。
我不明白這種差異來自何處。
這不是問題所在。被調用兩次的函數沒有相同的結果,請再次閱讀他的問題。我正在調查,我得到了領導,我認爲 –
它可能是一個參考值與複製值。在A = myFunct(A)調用之間嘗試使用A = JSON.parse(JSON.stringify(A))。我無法測試我在我的iPhone上 –
@FlavienVolken是的,它確實解決了它,但我不明白爲什麼它在這裏失敗。 :o –