2
我有一個多維數組像這樣:奇怪的JavaScript數組行爲。它可以修復嗎?
var map = [[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0],[0,0,0,0,0]];
我然後有幾個函數「調整大小」的陣列在兩個維度上,這取決於某些變量。這就是我要做的事:
function resizeArr(arr, rows, rowsDiff, cols, colsDiff) {
var arrLength = arr.length;
if (colsDiff > 0) {
i=0;
while (i<arrLength) {
j=0;
while (j<colsDiff) {
arr[i].push(0);
j++
}
i++
}
}
if (colsDiff < 0) {
i=0;
while (i<arrLength) {
j=0;
colsDiffAbs = Math.abs(colsDiff);
while (j<colsDiffAbs) {
arr[i].pop();
j++
}
i++
}
}
if (rowsDiff > 0) {
fullColsArr = makeArrayOf(0, cols);
i=0;
while (i<rowsDiff) {
arr.push(fullColsArr);
i++
}
}
if (rowsDiff < 0) {
rowsDiffAbs = Math.abs(rowsDiff);
i=0;
while (i<rowsDiffAbs) {
arr.pop();
i++
}
}
return arr;
}
基本上,與4 if語句,我蹦出來的某些值或推一些新的(零)取決於rowsDiff/colsDiff變量是正還是負。
我的問題是,當我從地圖的最大調整陣列[4] [4]映射[9] [9],它看起來像一切都還好,因爲我得到:
[[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0]]
爲我的新陣列,看起來不錯。然而,當我嘗試分配一個特定的值來映射[9] [9],它填補了每一個新的數組的最後一個值,如下所示:
[[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,0],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14],[0,0,0,0,0,0,0,0,0,14]]
如果我試圖分配一個值到所述第二至最後一個值(圖[9] [8]),它填滿了所有其他值的倒數第二個值。
但是,當我給數組的原始部分賦值時,它可以正常工作。 我在這裏做錯了什麼?
我試圖用我的能力來解釋它 - 隨時要求進一步的細節。
完美!謝謝:)我不知道爲什麼我沒有想到這一點。對我來說另一個學習經歷,嘿嘿。 – DavidPM 2012-07-14 21:29:39