我只是在 Vanilla JS 中嘗試了一些東西,遇到了一個問題,array.push 不會推送另一個陣列(行),它的元素在 for 回圈中被更改,而是替換整個陣列(mainArr)。最好顯示代碼,所以請在下面滾動
function genArray(m, n) {
let mainArr = [];
let row = [];
for (let i = 0; i < m; i ) {
for (let j = 0; j < n; j ) {
row.push(j);
}
mainArr.push(row)
}
return mainArr;
}
let myArr = genArray(3, 2);
console.log(myArr);
/**
* outputs:
*
* [ [ 0, 1, 0, 1, 0, 1 ],
* [ 0, 1, 0, 1, 0, 1 ],
* [ 0, 1, 0, 1, 0, 1 ] ]
*
* why not:
*
* [ [ 0, 1 ],
* [ 0, 1, 0, 1 ],
* [ 0, 1, 0, 1, 0, 1 ] ]
*/
起初我認為這只是因為這個SOF 答案所說的附加了參考,但正如代碼所示,事實并非如此。
let arr1 = []
let arr2 = [1, 2]
arr1.push(arr2)
console.log(arr1); // [ [ 1, 2 ] ]
arr2 = [2, 4]
console.log(arr1); // still [ [ 1, 2 ] ]
let arr3 = []
let obj1 = {name: "John"}
arr3.push(obj1)
console.log(arr3); // [ {name: "John"}]
obj1.name = "Mike"
console.log(arr3); // [ {name: "Mike"} ]
uj5u.com熱心網友回復:
您每次都在更新同一個陣列,因此所有插入的串列最終將指向具有上次迭代中設定的值的相同參考。
以下是通過增強以達到預期輸出的修復:
function genArray(m, n) {
const mainArr = [];
for (let i = 0; i < m; i ) {
const row = [];
let count = i;
while(count-- >= 0) {
for (let j = 0; j < n; j ) {
row.push(j);
}
}
mainArr.push(row)
}
return mainArr;
}
console.log( genArray(3, 2) );
uj5u.com熱心網友回復:
您可以使用解構賦值而不是 array.push。像這樣:
function genArray(m, n) {
let mainArr = [];
let row = [];
for (let i = 0; i < m; i ) {
for (let j = 0; j < n; j ) {
row=[...row,j];
}
mainArr.push(row)
}
return mainArr;
}
let myArr = genArray(3, 2);
console.log(myArr);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/497966.html
標籤:javascript 数组 for循环 参考
上一篇:ReactHookuseEffect缺少依賴項:'id'。包括它或洗掉依賴陣列
下一篇:每次點擊都創建苗條的組件
