這段代碼將列印[1,2,3,4,5,6,7,8,9,10]在控制臺上,這意味著在每次迭代 arr.length 更改中,這也反映在回圈體中。
let arr = [1, 2, 3];
for (e of arr) {
arr.push(arr[arr.length - 1] 1);
if (arr.length >= 10) break;
}
console.log(arr)
但是在這里,輸出將是[4,5,6],這意味著 shift() 函式沒有考慮陣列的擴展。
let arr = [1, 2, 3];
for (e of arr) {
arr.push(arr[arr.length - 1] 1);
if (arr[arr.length - 1] >= 10) break;
arr.shift();
}
console.log(arr)
我的問題是為什么?我期望[8,9,10]第二個代碼的輸出
uj5u.com熱心網友回復:
原因是你先添加元素,然后呼叫shift()洗掉元素,所以陣列大小不會改變,它只會迭代一次
let arr = [1, 2, 3];
for (e of arr) {
arr.push(arr[arr.length - 1] 1); // add element
if (arr[arr.length - 1] >= 10) break;
arr.shift(); // remove element
}
console.log(arr)
為了得到你預期的結果,我們需要確保它可以多次迭代直到得到預期的結果。所以我們可以for改為while
let arr = [1, 2, 3];
while(arr.at(-1) < 10) {
arr.push(arr.at(-1) 1);
arr.shift();
}
console.log(arr)
uj5u.com熱心網友回復:
第二個for ...of回圈正常作業:
let arr = [1, 2, 3];
for (e of arr) {
arr.push(arr[arr.length - 1] 1); // 4, 5, 6
if (arr[arr.length - 1] >= 10) break; // false, false, false
arr.shift(); // 1, 2, 3
}
console.log(arr); // [ 4, 5, 6 ]
因為您在每個回圈中使用 洗掉陣列的第一個元素,所以您的陣列在回圈shift()開始時永遠不會超過 3 個元素,因此它只會回圈 3 次。
希望這可以幫助。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/528594.html
上一篇:c|如何改進字符檢查
