2014-09-25 51 views
1

JS新手,我遇到了這個問題。我知道我只是想念一些東西。我感謝任何幫助答案。我包含了我的嘗試代碼。 (不要笑)刪除數組中的所有值,甚至不是

//Loop through arr removing all values that aren't even 
//hint x % 2 --> checks for even numbers 

var arr = [1,2,3,6,22,98,45,23,22,12]; 
for (var i = 0; i > arr.length; i++) { 
    while (i % 2 !== 0) { 
     arr.splice(i); 
    } 
} 
alert(arr); 
+0

這個拼接需要至少兩個參數。 – 2014-09-25 02:48:34

+0

您的代碼有問題嗎?你有什麼問題? – 2014-09-25 02:51:38

+0

感謝您指出拼接錯誤。 (這應該是一個明顯的錯誤。) – Steran 2014-09-27 05:02:59

回答

0
var arr = [1,2,3,6,22,98,45,23,22,12]; 
for (var i = arr.length; i >= 0; i--) { 
     if(arr[i] % 2 !== 0) { 
     // splice takes two arguments at least index to start removing and the number of elements to remove 
     arr.splice(i, 1); 
    } 
} 

console.log(arr); 
+0

謝謝!我選擇這個答案是因爲它對我目前的JS知識水平來說是最好的。 – Steran 2014-09-27 05:09:43

1
var arr = [1,2,3,6,22,98,45,23,22,12]; 
var arr2=[]; 
arr.forEach(function(e){if (e%2!==0) arr2.push(e)}); 
alert(arr2); 

所以,你必須在陣列稱爲arr,並且要建立這一個新的數組。您附加了一種內置於現代javascript中的方法,稱爲「forEach」,這意味着對於數組的每個值,它都會執行()之間的函數。變量e表示元素,它使您可以訪問它所在的當前數組項。所以如果e%2!== 0(又如果e是奇數),把它推到新的數組中。然後,在它結束了所有事情之後,你有了新的陣列。

3

你也可以使用.filter如果您指定新的瀏覽器或節點:

var arr2 = arr.filter(function(o) { 
    return o % 2 !== 0; 
}); 
+0

很酷。我還沒有看到**過濾器**,所以感謝您的介紹。 – Steran 2014-09-27 05:06:05

4

這是一個很好的把戲我從一個要點了,你真正需要使用反向循環以避免搞亂指數

for (var i = arr.length; i >= 0; i--) { 
    if (i % 2 !== 0) { 
     arr.splice(i); 
    } 
} 

這是一個跨瀏覽器選項,您還可以使用過濾器@agreco說,但不可用在每個瀏覽器