2015-05-07 6 views
0
var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var Remve = []; 
var i; 

for(i=0;i<myNums.length;i++){ 
    if(myNums[i] % 3 == 0){ 
     Remve.push(myNums[i]) 
    }else{ 
     myNums.push(myNums[i]) 
    } 
} 

document.write(myNums); 
document.write(Remve); 

爲什麼我的push函數在我將值插入到同一個數組中時不起作用?爲什麼我的push功能在我將值插入到同一個數組中時不起作用

當我在另一個數組插入它的作品。

+8

什麼您_not working_的意思是之前得到數組的長度?實際與預期行爲是什麼? – Halcyon

+1

您是否知道您在每次迭代中檢查myNums的新長度?所以這個循環沒有結束。你的目標並不明確,但是你可能想要'for(var i = 0,i = myNums.length; i

+2

你正在生成一個無限循環。 –

回答

1

剖析你的代碼的相關部分:

// 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); 

通過第一緩存長度,你就不會進入無限循環。

您也可以將不可變項目推送到不同的數組中,而不是放到當前的數組中,這樣可以同樣解決問題。

+0

謝謝ssube – user3090653

-1

使用單獨的數組(myNumsArr)來存儲值而不是myNums。您當前的代碼將導致無限循環。

var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var myNumsArr = []; 
var Remve = []; 
var i; 

for(i=0;i<myNums.length;i++){ 
    if(myNums[i] % 3 == 0){ 
     Remve.push(myNums[i]) 
    }else{ 
     myNumsArr.push(myNums[i]) 
    } 
} 

myNums = myNums.concat(myNumsArr); 
+0

這個答案爲什麼爲負數?請解釋。 –

+0

將剩餘價值存儲在同一個陣列中 – user3090653

+0

好的,我相信您現在已經得到了解決方案。但是,另一種選擇是,一旦for循環完成,可以使用myNums將新數組(myNumsArr)連接起來。通過這種方式,您可以瞭解未除以3的值。 –

0

你沒有說你的意思是「不工作」,我不確定你想要做什麼,但我看到了一個問題。循環是從數組的長度開始的,每當數組在第9次迭代後運行時都會發生變化,導致無限循環。保存在一個靜態變量固定的:

var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var Remve = []; 
var i; 

var myNumLength = myNums.length; 

for(i=0;i<myNumLength;i++){ 
    if(myNums[i] % 3 == 0){ 
     Remve.push(myNums[i]) 
    }else{ 
     myNums.push(myNums[i]) 
    } 
} 

document.write(myNums); 
document.write('<br>'); 
document.write(Remve); 

更新:新代碼:

var originalNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var newNums = []; 
var removedNums = []; 
var i; 

var myNumLength = originalNums.length; 

for(i=0;i<myNumLength;i++){ 
    if(originalNums[i] % 3 == 0){ 
     removedNums.push(originalNums[i]) 
    }else{ 
     newNums.push(originalNums[i]) 
    } 
} 

document.write(newNums); 
document.write('<br>'); 
document.write(removedNums); 

再次更新

var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var removedNums = []; 
var i; 

var myNumLength = myNums.length; 

for(i=0;i<myNumLength;i++){ 
    if(myNums[i] % 3 == 0){ 
     removedNums.push(myNums[i]); 
     myNums.splice(i, 1); 
     i--; 
    } 
} 

document.write(myNums); 
document.write('<br>'); 
document.write(removedNums); 
+0

謝謝詹姆斯,但是兩個mynums值顯示前後 – user3090653

+0

您想完成什麼? –

+0

我想在刪除3 6 9之後插入剩餘的值 – user3090653

0

A)您經常檢查myNums.length,而插入值進去。 B)它正在工作,因爲您可以一次又一次地看到出現在myNums中的相同值。但這是一個無限循環。

C)Console.log(Rmve);表明你確實選擇了可被3整除的數字。

0

它正在無限循環中運行。您在同一個數組中推送值,以便數組長度不斷增加,並且永遠不會結束。

var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var Remve = []; 
var i; 

for(i=0;i<myNums.length;i++){ 
    if(myNums[i] % 3 == 0){ 
     Remve.push(myNums[i]) 
    }else{ 
     myNums.push(myNums[i]) //problematic line 
    } 

} 
+0

謝謝,我明白了 – user3090653

+0

不用客氣 – kannanrbk

0

您當前的代碼正在生成一個無限循環,您的退出條件永遠不會滿足。

請注意,myNums.length不斷增加,因爲您正在循環內添加新元素。

你應該開始遍歷

var myNums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]; 
var Remve = []; 
var i; 
var arrayLength = myNums.length; // get length BEFORE starting for loop 

for(i=0; i < arrayLength; i++){ 
    if(myNums[i] % 3 == 0){ 
     Remve.push(myNums[i]) 
    }else{ 
     myNums.push(myNums[i]) 
    } 
} 

alert(myNums); 
alert(Remve); 
+0

我試圖在刪除3 6 9之後插入剩餘的值 – user3090653

相關問題