Удалить элемент из массива, используя срез

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

    console.log(this.activeEffects); // Prints my array
    console.log(this.activeEffects.slice(0,1)); // Remove from index 0, and remove one.
    console.log(this.activeEffects); // Prints array again, this time my element should be gone

Результат этого.

enter image description here

Итак, что получается из этого, сначала массив цел, как и должно быть. Затем он печатает то, что нарезано массивом. Наконец, третий должен быть пустым? или?

Ответ 1

Я считаю, что вы ищете splice. Из Школы W3:

Метод splice() добавляет/удаляет элементы в/из массива и возвращает удаленные элементы.

Взгляните на пример на этой странице; пример использования аналогичен тому, что вы хотите достичь.

EDIT: Альтернативная ссылка на MDN, как было предложено Nicosunshine; гораздо больше информации о команде там.

Ответ 2

.slice не мутирует массив, вы можете использовать .splice() для удаления элемента в индексе i в массиве:

this.activeEffects.splice(i, 1)

Ответ 3

Вот что я смог придумать:

var newArray = oldArray.slice(indexOfElementToRemove+1).concat(oldArray.slice(0,indexOfElementToRemove));

Ответ 4

function removeItemWithSlice(index) {
  return [...items.slice(0, index), ...items.slice(index + 1)]
}

Slice создаст новый массив. Мы создаем два массива: от начала до индекса и от индекса + 1 до конца. Затем мы применяем оператор спреда (...), чтобы взять элементы этих массивов и создать новый единый массив, содержащий все элементы, которые нам небезразличны. Я вставлю эквивалентный путь, если вам не нравится один лайнер:

function removeItemWithSlice(index) {
  const firstArr = items.slice(0, index);
  const secondArr = items.slice(index + 1);
  return [...firstArr , ...secondArr]
}

Ответ 5

a.slice(0, index).concat(a.slice(index + 1))

Ответ 6

Array.prototype.slice()...

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

В то время как Array.prototype.splice()...

Изменяет содержимое массива, добавляя новые элементы при удалении старых элементов.

Этот пример должен иллюстрировать разницу.

// sample array
var list = ["a","b","c","d"];
// slice returns a new array
console.log("copied items: %o", list.slice(2));
// but leaves list itself unchanged
console.log("list: %o", list);
// splice modifies the array and returns a list of the removed items
console.log("removed items: %o", list.splice(2));
// list has changed
console.log("list: %o", list);

Ответ 7

Посмотрите здесь: http://www.w3schools.com/jsref/jsref_slice_array.asp

Вы можете видеть, что метод slice выбирает объект et и помещает их в новый объект массива ^^ Таким образом, вы не можете удалить такой объект, возможно, вы можете попробовать следующее:

var a = ["a","b","c"]; (pseudo code)
/* I wan't to remove the "b" object */

var result = a.slice(0,1)+a.slice(2,1); /* If you considers that "+" is a concatenation operator, i don't remember if it is true... */