Удалить элемент из массива, используя срез
Я пытаюсь удалить элемент из моего массива с помощью среза, но я не могу заставить его работать, посмотрите на этот фрагмент кода.
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... */