2014-09-25 4 views
1

Новое для JS, и я столкнулся с этой проблемой. Я знаю, что я просто что-то пропустил. Я благодарю любую помощь с ответом. Я включил свой код. (Dont смех.)Удалите все значения из массива, которые даже не

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

Um, сращивание занимает не менее двух параметров. –

+0

Есть ли проблема с кодом, который у вас есть? Каков твой вопрос? –

+0

Спасибо за указание ошибки сращивания. (Это должно было быть очевидной ошибкой.) – Steran

ответ

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

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 (aka, если e нечетно), перетащите его в новый массив. Затем, после того, как он зациклился на всем, у вас есть новый массив.

3

Вы также можете использовать .filter, если вы ориентируетесь новые браузеры или узел:

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

Прохладный. Я еще не видел ** filter **, поэтому спасибо за введение. – Steran

4

Это хороший трюк, который я получил от сути, вы на самом деле нужно использовать обратный цикл, чтобы избежать баловаться индекс

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

Это вариант броузеров, вы также можете использовать фильтр, как @agreco говорит, но не доступен в любом браузере

Смежные вопросы