Как я могу удалить объект из массива? Я хочу удалить объект, который включает имя Kristian
из someArray
. Например:
someArray = [{name:"Kristian", lines:"2,5,10"},
{name:"John", lines:"1,19,26,96"}];
Я хочу добиться:
someArray = [{name:"John", lines:"1,19,26,96"}];
javascript
arrays
Клем
источник
источник
Ответы:
Вы можете использовать несколько методов для удаления элементов из массива:
Если вы хотите удалить элемент в позиции
x
, используйте:Или
Ответ на комментарий @ chill182 : вы можете удалить один или несколько элементов из массива с помощью
Array.filter
или вArray.splice
сочетании сArray.findIndex
(см. MDN ), напримеристочник
findIndex
результат, прежде чем использовать его вsplice
. Если в массиве нет элементов, соответствующих условию,findIndex
будет возвращено условие ,-1
и его непосредственное включениеsplice
приведет к произвольному удалению последнего элемента в массиве.Я рекомендую использовать lodash.js или sugar.js для общих задач, таких как:
в большинстве проектов очень полезно иметь набор вспомогательных методов, предоставляемых такими библиотеками.
источник
someArray = _.reject(someArray, function(el) { return el.Name === "Kristian"; });
someArray = someArray.filter(function(e) { return e.Name !== "Kristian"; });
Чистое решение будет использовать
Array.filter
:Проблема в том, что он не работает в IE <9. Однако вы можете включить код из библиотеки Javascript (например, underscore.js ), который реализует это для любого браузера.
источник
someArray = someArray.filter(function(el) { return el.Name != "Kristian"; });
адреса, которые нет?Как насчет этого?
источник
$.each()
кеширует длину массива перед циклом, поэтому, если вы удалите элемент, он$.each()
будет проходить после конца (теперь более короткого) массива. (Так что тогдаsomeArray[i]
будетundefined
иundefined.name
рухнет.)Ваш "массив", как показано, имеет неверный синтаксис JavaScript. Фигурные скобки
{}
предназначены для объектов с парами имя / значение свойства, а квадратные скобки[]
- для массивов, например:В этом случае вы можете использовать
.splice()
метод для удаления элемента. Чтобы удалить первый элемент (индекс 0), скажите:Если вы не знаете индекс, но хотите выполнить поиск в массиве, чтобы найти элемент с именем «Kristian», вы можете удалить это:
РЕДАКТИРОВАТЬ: я только что заметил, что ваш вопрос помечен как «jQuery», так что вы можете попробовать
$.grep()
метод :источник
$.grep()
? Это мало что добавляет в этом примере, где да, я мог бы поставить!=
, но в других случаях у вас уже может быть определена функция, которая выполняет противоположный тест по отношению к тому, что вы хотите выполнить grep, так что вместо определения Дополнительная функция, которую вы можете просто использовать эту перегрузку, чтобы инвертировать результаты.function isEven(num) { return num%2===0 }
. Вы можете использовать,$.grep(someArray, isEven)
чтобы получить только четные числа из массива, или$.grep(someArray, isEven, true)
сделать наоборот и получить нечетные значения.ES2015
Это удалит Джона !
источник
Вы можете использовать array.filter ().
например
Функции стрелок:
источник
Я сделал динамическую функцию, принимает объекты Array, Key и value и возвращает тот же массив после удаления нужного объекта:
Полный пример: ДЕМО
источник
Это функция, которая работает для меня:
источник
Вы также можете попробовать сделать что-то вроде этого:
источник
источник
Используйте функцию сплайсинга на массивах. Укажите позицию начального элемента и длину подпоследовательности, которую вы хотите удалить.
источник
Голосуйте за UndercoreJS за простую работу с массивами.
Функция _.without () помогает удалить элемент:
источник
С функцией стрелки ES 6
источник
Простейшим решением было бы создать карту, в которой хранятся индексы для каждого объекта по имени, например:
источник
Хотя это, вероятно, не совсем подходит для этой ситуации, я узнал на днях, что вы также можете использовать
delete
ключевое слово, чтобы удалить элемент из массива, если вам не нужно изменять размер массива, напримеристочник
Этот ответ
не работает для нескольких записей, удовлетворяющих условию. Если у вас есть две такие последовательные записи, удаляется только первая, а другая пропускается. Вы должны использовать:
вместо.
источник
Кажется, в синтаксисе вашего массива есть ошибка, поэтому, если вы имеете в виду массив, а не объект, Array.splice ваш друг здесь:
источник
Вы также можете использовать функцию карты .
источник
Вы также можете использовать
some
:источник
Это то, что я использую.
Тогда это так же просто, как сказать
Замените любое число вместо трех. После ожидаемого выхода должно быть:
источник
Если вы хотите удалить все вхождения данного объекта (на основе какого-либо условия), используйте метод соединения javascript внутри цикла for.
Поскольку удаление объекта повлияет на длину массива, обязательно уменьшите счетчик на один шаг, чтобы проверка длины осталась без изменений.
Приведенный выше фрагмент кода удаляет все объекты, возраст которых превышает 20 лет.
источник
Используйте функцию javascript splice ().
Это может помочь: http://www.w3schools.com/jsref/jsref_splice.asp
источник
splice (i, 1) где i - инкрементный индекс массива, удалит объект. Но помните, что сплайс также сбрасывает длину массива, так что следите за «неопределенным». Используя ваш пример, если вы удалите «Kristian», то при следующем выполнении в цикле у меня будет 2, а someArray будет иметь длину 1, поэтому, если вы попытаетесь удалить «John», вы получите ошибку «undefined» , Одним из решений этого, хотя и не элегантного, является наличие отдельного счетчика для отслеживания индекса удаляемого элемента.
источник
Возвращает только объекты из массива, свойство
name
которых не "Kristian"Демо-версия:
источник
Это концепции с использованием кендо сетки
источник
Я думаю, что ответы очень разветвлены и завязаны.
Вы можете использовать следующий путь для удаления объекта массива, который соответствует объекту, данному в современном жаргоне JavaScript.
источник
Если вы хотите получить доступ и удалить объект массива просто, вы можете попробовать что-то вроде этого.
источник