簡體   English   中英

Push()與Java數組中的數組

[英]Push() with Arrays of Arrays in Javascript

我試圖建立一個“數組數組”(想像一個具有列和行的表)。 我有遍歷每個“行”的代碼,並構建了一個“列”數組,然后將其壓入行數組:

var myRows = [];  // array of 'column' arrays
var myCols = [];  // 'buffer' for each column

for (r=4; r>=0; r--) {
   myCols.length = 0; 
  for (c=0; c<10; c++) {
   myCols.push("row: " + r +", col: " + c);
  }
  myRows.push(myCols);
}
console.log(myRows);

我對console.log(myRows)期望是這樣的:

[Array[10], Array[10], Array[10], Array[10], Array[10]]
0: Array[10]
0: "row: 0, col: 0"
1: "row: 0, col: 1"
2: "row: 0, col: 2"
3: "row: 0, col: 3"
4: "row: 0, col: 4"
5: "row: 0, col: 5"
6: "row: 0, col: 6"
7: "row: 0, col: 7"
8: "row: 0, col: 8"
9: "row: 0, col: 9"
length: 10
__proto__: Array[0]
1: Array[10]
0: "row: 1, col: 0"
1: "row: 1, col: 1"
2: "row: 1, col: 2"
3: "row: 1, col: 3"
4: "row: 1, col: 4"
5: "row: 1, col: 5"
6: "row: 1, col: 6"
7: "row: 1, col: 7"
8: "row: 1, col: 8"
9: "row: 1, col: 9"
length: 10
...

但是,記錄的內容(在Chrome中)在每次迭代中均顯示該行為“ 0”。 不僅如此,如果我將迭代規則更改為不為0,它還顯示了“ myRows”數組集合的所有子數組的最后一個“行”。

真的很抓頭,關於push()方法我是否不了解?

每次通過外循環,您都需要創建一個新的 cols數組。 您對每行使用相同的cols數組,並對其進行修改,因為myRows.push(myCols)將對該數組的引用推入,但不會產生副本。

更改:

myCols.length = 0;

至:

myCols = [];

myCols的值是對數組的引用。

myRows.push(myCols); 將該值放入myRows引用的myRows

在您的代碼中,這始終是相同的array

myCols.length = 0; 刪除該數組的內容。


每次循環時都需要創建一個新的數組。

替換myCols.length = 0; myCols = [];

您正在為每一列一遍又一遍地重復添加同一對象。 您需要在每次通過時創建一個新的Array

var myCols = [];
for (r=4; r>=0; r--) {
    myCols = new Array(); // or temp = [];
    for (c=0; c<10; c++) {
        myCols.push("row: " + r +", col: " + c);
    }
    myRows.push(myCols);
}

您正在遇到此問題,因為javascript數組是按引用存儲的。 您不是在外部循環中創建新列,而是覆蓋現有列,而僅將對相同columns數組的新引用推入rows數組中。 本質上,行數組是對同一列數組的5個引用的數組。

為了克服這個問題,您必須像這樣在外部循環中創建一個新的myCols數組:

var myRows = [];  // array of 'column' arrays

for (r=4; r>=0; r--) {
    var myCols = [];  // 'buffer' for each column
    for (c=0; c<10; c++) {
        myCols.push("row: " + r +", col: " + c);
}
myRows.push(myCols);
}
console.log(myRows);

暫無
暫無

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

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