Как убрать следующий элемент после первого? - PullRequest
4 голосов
/ 08 июля 2019

Цель состояла в том, чтобы получить все остальные элементы массива, которые соответствуют условиям, которые у меня были, но я не смог этого сделать.

Итак, я решил попробовать другой пример, который был найденв Array.prototype.indexOf() в MDN .

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison', 'duck', 'duck', 'bison', "duck", 'bison',"camel", "duck", "duck"];

beasts.splice(beasts.indexOf("bison",beasts.indexOf("bison"+1)),1);
console.log(beasts);

я бы ожидал, что он удалит второго "бизона" из массива, и все же он удалит последний элемент, который является "уткой"...

Что я мог здесь сделать?(возможно, я еще не выучил правильный синтаксис для этого материала)

Ответы [ 5 ]

4 голосов
/ 08 июля 2019

В вашем коде сплайсинга есть только одна ошибка, которая была обнаружена в комментариях (It should be: beasts.indexOf("bison") + 1 and not beasts.indexOf("bison"+1), как говорит @adiga).

Однако я думаю, что вы действительно хотели бы удалить все экземпляров 'bison' из списка.Я могу ошибаться, но это предположение.Вы можете сделать это с помощью фильтра:

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison', 'duck', 'duck', 'bison', "duck", 'bison',"camel", "duck", "duck"];

const updatedBeasts = beasts.filter(beast => beast !== 'bison');

console.dir(updatedBeasts);
3 голосов
/ 08 июля 2019

Проблема в том, что вы собираетесь за bison+1, а не bison, поэтому попробуйте это:

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison', 'duck', 'duck', 'bison', "duck", 'bison',"camel", "duck", "duck"];

beasts.splice(beasts.indexOf("bison",beasts.indexOf("bison")),1);
console.log(beasts);
2 голосов
/ 08 июля 2019

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

array.splice (начальный_индекс_from_which_the elements_are_to_be_deleted, number_of_elements_to_be_deleted)

Если длина массива больше, начало будет установлено равным длине массива.
Правильный формат вашего кода:

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison', 'duck', 'duck', 'bison', "duck", 'bison',"camel", "duck", "duck"];

beasts.splice(beasts.indexOf("bison"),beasts.indexOf("bison")+1);
console.log(beasts);
2 голосов
/ 08 июля 2019

Вам нужно исправить синтаксис indexOf

beasts.indexOf("bison"+1)  // this searches for `bison1`

к этому

beasts.indexOf("bison") + 1

var beasts = ['ant', 'bison', 'camel', 'duck', 'bison', 'duck', 'duck', 'bison', "duck", 'bison',"camel", "duck", "duck"];

beasts.splice(beasts.indexOf("bison",beasts.indexOf("bison")+1),1)
console.log(beasts);
0 голосов
/ 08 июля 2019

вот рабочий путь

let beasts = ['ant', 'bison', 'camel', 'duck', 'bison', 'duck', 'duck', 'bison', "duck", 'bison',"camel", "duck", "duck"];

beasts.splice(beasts.indexOf("bison",beasts.indexOf("bison")),1);
console.log(beasts);
...