2010-11-29 1 views
6

Я хочу удалить каждый второй и третий элементы из массива в Javascript.Как удалить каждый второй и третий элементы из массива в Javascript?

Мой массив выглядит следующим образом:

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10"]; 

Теперь я хочу, чтобы удалить каждый второй и третий элемент. Результат будет выглядеть следующим образом:

["Banana", "Orange", "Apple"] 

Я пытался использовать для цикла и сращивания:

for (var i = 0; fruits.length; i = i+3) { 
    fruits.splice(i+1,0); 
    fruits.splice(i+2,0); 
}; 

Конечно, это возвращает пустой массив, так как элементы удаляются, а цикл все еще выполняется , Как я могу сделать это правильно?

спасибо.

+0

Там в пару вещей неправильно, особенно что это эквивалент запуска `while (fruits)`, который будет работать до тех пор, пока фрукты оценят true, а не просто через массив один раз. – Yahel 2010-11-29 21:34:46

ответ

12

Вы могли бы подойти к этому с другой точки зрения и push() значение, которое вы не хотите удалены в другой массив:

var firstFruits = [] 

for (var i = 0; i < fruits.length; i = i+3) { 
    firstFruits.push(fruits[i]); 
}; 

Такой подход не может быть столь же лаконична, как с помощью splice(), но я думаю, что вы видите выигрыш с точки зрения читаемости.

+0

Я предпочел бы первую за секунду, так как вторая создаст массив, такой как `[" Бананы "," "," "," Оранжевый "," "," "," Яблоко "]` – Robert 2010-11-29 21:50:02

+0

@Robert, вы абсолютно правы. Я уверен, что это не функциональность, которую желает OP. Спасибо, я обновлю свой ответ, чтобы включить только первый. – McStretch 2010-11-29 21:54:52

+0

Ничего себе, это легко. Большое спасибо. :-) – Bob 2010-11-29 21:58:47

0

Рассматривали ли вы просто копирование первого, четвертого и седьмого элементов в новый массив? Это не очень эффективная память, но все равно будет работать нормально.

1

Try цикл через массив в обратном порядке

0

Вы хотите переместить через массив в обратном направлении, а затем, если i % 2 == 0 || i%3 == 0 затем склеить элемент из массива

9

Это работает для меня.

var fruits = ["Banana", "yellow", "23", "Orange", "orange", "12", "Apple", "green", "10","Pear","something","else"]; 

for(var i = 0; i < fruits.length; i++) { 
    fruits.splice(i+1,2); 
} 

//fruits = Banana,Orange,Apple,Pear 

Вот демо, который иллюстрирует это немного лучше: http://jsfiddle.net/RaRR7/

1

Вы можете использовать фильтр:

var filtered = [ 
    "Banana", 
    "yellow", 
    "23", 
    "Orange", 
    "orange", 
    "12", 
    "Apple", 
    "green", 
    "10" 
].filter(function(_, i) { 
    return i % 3 === 0; 
}) 

Возвращает:

["Banana", "Orange", "Apple"] 
Смежные вопросы