Как удалить объект из массива?
Если же id имеют не уникальные значения, то создание нового массива остаётся без изменений, а модификация существующего может выглядеть так:
for (let i = arr.length; i--; ) < if (arr[i].id === id) < arr.splice(i, 1); >>
или так (да, reduceRight используется не совсем по назначения, как и оператор && ):
arr.reduceRight((_, n, i, a) => n.id === id && a.splice(i, 1), null);
let countDeleted = 0; for (let i = 0; i < arr.length; i++) < arr[i - countDeleted] = arr[i]; countDeleted += arr[i].id === id; >arr.length -= countDeleted;
arr.splice(0, arr.length, . arr.filter(n => n.id !== id));
Как удалить объекты из массива по ключу?
Как можно удалить все объекты с встречающимеся id из списка? То есть если в объекте в поле _id есть какое-то значение из второго массива, то этот объект должен удаляться из первого массива.
Отслеживать
12.9k 10 10 золотых знаков 40 40 серебряных знаков 77 77 бронзовых знаков
задан 28 апр 2016 в 21:50
Sdafs Fasafs Sdafs Fasafs
857 1 1 золотой знак 9 9 серебряных знаков 24 24 бронзовых знака
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
В данном случае подойдет метод filter, с небольшими приготовлениями.
Чтобы сократить действия по проверке есть ли проверяемый id в массиве, этот массив можно предварительно преобразовать в объект ключами которого будут элементы массива, например так
var ids = ["a","b","c"]; var idsMap = ids.reduce(function(map,id),<>);
Получим объект вида:
Далее используем метод filter
var filtered = objs.filter(function(el)< return !idsMap[el._id]; >);
В массиве filtered будут только элементы _id которых нет в массиве с Id
var ids = ["a", "b", "c"]; var idsMap = ids.reduce(function(map, id) < map[id] = true; return map; >, <>); var objs = [< _id: 'a', name: 1 >, < _id: 'f', name: 2 >, < _id: 'd', name: 3 >, < _id: 'b', name: 4 >, < _id: 'e', name: 5 >, < _id: 'c', name: 6 >]; var filtered = objs.filter(function(el) < return !idsMap[el._id]; >); document.write('Source:'+JSON.stringify(objs,null,2)+'') document.write('Filtered:
'+JSON.stringify(filtered,null,2)+'')
Также можно использоваться thisArg параметр в функции filter , что позволит избавиться от замыкания переменной
var ids = ["a", "b", "c"]; var idsMap = ids.reduce(function(map, id) < map[id] = true; return map; >, <>); var objs = [< _id: 'a', name: 1 >, < _id: 'f', name: 2 >, < _id: 'd', name: 3 >, < _id: 'b', name: 4 >, < _id: 'e', name: 5 >, < _id: 'c', name: 6 >]; var filtered = objs.filter(function(el) < return !this[el._id]; >,idsMap); document.write('Source:'+JSON.stringify(objs,null,2)+'') document.write('Filtered:
'+JSON.stringify(filtered,null,2)+'')
Как удалить элемент из массива в JavaScript
Перевод статьи «Remove element from an array».
Удалить один или большее число элементов из уже существующего массива — распространенная задача в программировании. В JavaScript есть несколько вариантов ее решения, от простых до более сложных. Выбор подходящего решения зависит от ваших нужд. Нужно ли вам решение, изменяющее исходный массив? Надо ли удалить элемент по значению или по индексу? Нужно убрать один или несколько элементов? В общем, давайте посмотрим, какие у нас есть варианты.
Удаление любого элемента при помощи метода filter
Метод filter() — самое универсальное решение. С его помощью можно удалить как один, так и несколько элементов, причем хоть по значению, хоть по индексу. Это неизменяемое решение. С его помощью, собственно, не элемент удаляется, а создается новый массив, из которого отфильтровываются нежелательные элементы. Этот метод широко поддерживается, даже в Internet Explorer. Совместимость можно проверить здесь.
Метод filter() принимает в качестве параметра функцию обратного вызова, которая будет вызываться со следующими аргументами:
- Значение (value) элемента (этот аргумент обязательный).
- Индекс (index) элемента — опционально.
- Исходный массив — тоже опционален.
Результирующий массив будет содержать элементы, для которых возвращаемое значение callback-функции будет истинным.
let originalArray = [1, 2, 3, 4, 5]; let filteredArray = originalArray.filter(myFilter); function myFilter(value) < return value < 3 || value >4; >Метод filter() можно применять в компактном виде — с использованием стрелочных функций. Это можно делать, если для вас не важна поддержка IE.
let originalArray = [1, 2, 3, 4, 5]; let filteredArray = originalArray.filter((value, index) => index !== 2);Удаление конкретного объекта
Даже если ваш массив содержит объекты, а не базовые типы данных, метод filter() все равно сработает. Просто нужно определить callback-функцию соответствующим образом.
let originalArray = [ , , ]; let filteredArray = originalArray.filter(value => value.age > 18);Удаление первого элемента
Пожалуй, самый простой вариант удаления элемента из массива — удаление первого элемента. Для примера можно взять FIFO-очередь. В этом случае для удаления первого элемента можно воспользоваться методом shift(). Этот метод возвращает удаленный элемент, так что вы сможете как-то его обработать при желании. В отличие от filter(), метод shift() изменяет исходный массив.
let myArray = [1, 2, 3, 4, 5]; let removedElement = myArray.shift();Удаление последнего элемента
Очень похожий вариант, только для случаев удаления элемента из LIFO-стека. Для удаления последнего элемента массива можно использовать метод pop(). Работает он аналогично методу shift(), который мы разбирали в предыдущем разделе.
let myArray = [1, 2, 3, 4, 5]; let removedElement = myArray.pop(); // myArray: 1,2,3,4Удаление конкретного элемента по индексу
Если вы хотите удалить из массива какой-то определенный элемент, можно воспользоваться методом splice(). Этот метод умеет не только удалять элементы, но и добавлять новые.
При помощи метода splice() можно удалить и больше одного элемента за раз. Для этого в качестве первого параметра укажите начальный индекс. Вторым параметром идет число элементов, которые вы хотите удалить. Этот второй параметр опционален. Если вы его не укажете, метод удалит указанный в первом параметре элемент, а также все элементы справа от него.
// splice(2) example let myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2); console.log("After splice(2): " + myArray); // splice(2, 1) example myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2, 1); console.log("After splice(2, 1): " + myArray); // splice(2, 2) example myArray = [1, 2, 3, 4, 5]; console.log("Before: " + myArray); myArray.splice(2, 2); console.log("After splice(2, 2): " + myArray);Поскольку метод splice() использует индексы массива, если вы захотите удалить элемент по значению, сначала придется найти его индекс.
Использование delete
Использование метода delete может быть очевидным, но он работает не так, как вы, вероятно, ожидаете. Он не удаляет элемент, а стирает его значение. Длина массива останется той же, а на позиции, которую вы очистили, будет неопределенное значение.
let myArray = [1, 2, 3, 4, 5]; delete(myArray[2]); // Result: 1,2,,4,5Как удалить определенный элемент из массива js
Правильным способом удаления элемента из массива будет использование метода splice() . Этот метод принимает три аргумента, но нам нужны только первые два из них. Это индекс начиная с которого мы хотим удалить элементы. А также количество элементов, которые будут удалены из массива. Взгляните на пример ниже:
const letters = ["a", "b", "c"]; const index = 1; array.splice(index, 2); console.log(letters); // => [ 'a' ]18 октября 2022
Часто бывает в задачах, что нам требуется удалить из массива определенный элемент.
Один из способов — это воспользоваться функцией высшего порядка filter:// К примеру, дан массив из чисел: const numbers = [1, 2, 3, 4, 5]; //необходимо удалить элемент, который равен трём. const numberToDelete = 3; //фильтруем исходный массив. //А для того, чтобы его не мутировать, присвоим его в новую переменную. const filteredNumbers = numbers.filter((number) => number !== numberToDelete); console.log(filteredNumbers); // => [1, 2, 4, 5] //Готово!Также есть самый явный способ для удаления элемента массива с помощью ключевого слова delete:
let fruits = ['banana', 'orange', 'apple']; //Допустим, что нам нужно удалить нулевой элемент массива. delete fruits[0]; console.log(fruits); // => [ , 'orange', 'apple' ]Обратите внимание, что на месте нулевого элемента осталось пустое место. Как правило, удалять элемент массива таким способом не является хорошей практикой. Данный способ приведен в качестве примера.
Если вам нужно удалить последний элемент массива, для этого есть способ — это метод pop(). Перейдём к примеру:
const fruits = ['banana', 'orange', 'apple']; fruits.pop(); console.log(fruits); // получаем => [ 'banana', 'orange' ]Но это еще не всё!
Одним из наиболее удобных методов для удаления элемента массива является метод splice():const names = ['John', 'Darina', 'Mark', 'Kris']; //допустим, что дан массив имён. // Нам необходимо удалить из массива второй элемент. names.splice(2, 1); // начиная со второго элемента удаляем один элемент console.log(names); // => [ 'John', 'Darina', 'Kris' ]Это не все способы удаления элементов из массива, но и среди указанных можно найти метод по душе или же придумать что-то свое.
Документация:
- Функция высшего порядка filter
- Метод splice()
- Метод pop()







