剖析你的代碼的相關部分:
// Allocate an array containing three values that will match: [3, 6, 9]
var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
// Get the length of myNums *every iteration*
for (i = 0; i < myNums.length; i++) {
if (myNums[i] % 3 == 0) {
...
} else {
// Append the value to myNums if it is evenly divisible by three
myNums.push(myNums[i])
}
}
這將創下一個無限循環。
在每次迭代中,myNums
看起來像:
[_1_, 2, 3, 4, 5, 6, 7, 8, 9, 10] // append 1
[1, _2_, 3, 4, 5, 6, 7, 8, 9, 10, 1] // append 2
[1, 2, _3_, 4, 5, 6, 7, 8, 9, 10, 1, 2]
[1, 2, 3, _4_, 5, 6, 7, 8, 9, 10, 1, 2] // append 4
[1, 2, 3, 4, _5_, 6, 7, 8, 9, 10, 1, 2, 4] // append 5
... and so on
一旦你打了集合的末尾,每次迭代將另一個值追加到最後。
你能解決這個漂亮容易,如果你不想打附加項目:
var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var Remve = [];
var i;
var l = myNums.length;
for (i = 0; i < l; i++) {
if (myNums[i] % 3 == 0) {
Remve.push(myNums[i])
} else {
myNums.push(myNums[i])
}
}
document.write(myNums);
document.write(Remve);
通過第一緩存長度,你就不會進入無限循環。
您也可以將不可變項目推送到不同的數組中,而不是放到當前的數組中,這樣可以同樣解決問題。
什麼您_not working_的意思是之前得到數組的長度?實際與預期行爲是什麼? – Halcyon
您是否知道您在每次迭代中檢查myNums的新長度?所以這個循環沒有結束。你的目標並不明確,但是你可能想要'for(var i = 0,i = myNums.length; i
你正在生成一個無限循環。 –