Я пробовал несколько подходов о том, как найти объект в массиве, где ID = var, и, если он найден, удалить объект из массива и вернуть новый массив объектов.
Данные:
[
{"id":"88","name":"Lets go testing"},
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
Я могу искать в массиве, используя jQuery $ grep;
var id = 88;
var result = $.grep(data, function(e){
return e.id == id;
});
Но как я могу удалить весь объект, когда id == 88, и вернуть данные так:
Данные:
[
{"id":"99","name":"Have fun boys and girls"},
{"id":"108","name":"You are awesome!"}
]
slice
функции и небольшогоfor
цикла?Ответы:
Просто отфильтруйте по противоположному предикату:
источник
slice
ничего не удаляет. Не уверен, к чему ты клонишь. Если у вас есть конкретная проблема, вы можете задать новый вопрос .data.filter(e => !ids.includes(e.id))
Вот решение, если вы не используете jquery:
источник
findIndex()
и потомsplice(index, 1)
на родительском массиве?arr = arr.filter( obj => obj.id !== id);
Вы можете упростить это, и здесь нет необходимости использовать jquery.
Просто переберите список, найдите соответствующий идентификатор, сплайс, а затем прервитесь, чтобы выйти из цикла
источник
i=data.length; i > 0; i--
выполните цикл в обратном порядке с помощью и не используйтеbreak
.i = data.length
сломается любойdata[i]
, должно быть что-то вродеi=data.length -1 ; i > -1; i--
В ES6 / 2015 для этого есть новый метод, использующий findIndex и оператор распространения массива:
Вы можете превратить его в функцию для последующего повторного использования следующим образом:
Таким образом, вы можете удалить элементы по разным ключам, используя один метод (и если нет объекта, который соответствует критериям, вы получите исходный массив):
Или вы можете поместить его в свой Array.prototype:
И используйте это так:
источник
Предполагая, что идентификаторы уникальны, и вам нужно будет только удалить один элемент
splice
должен сделать трюк:источник
each(data,function(idx,ele)
. Я выставлю счет тебе позже за 30 минут, которые я потратил впустую, выясняя это :)Если вы используете jQuery, используйте jQuery.grep следующим образом:
Используя ES5 Array.prototype.filter :
источник
jQuery
карту в качестве фильтра.Может быть, вы ищете
$.grep()
функцию:источник
sift
является мощным фильтром коллекции для подобных операций и для более сложных. Работает на стороне клиента в браузере или на стороне сервера в node.js.Он поддерживает фильтры , такие как
$in
,$nin
,$exists
,$gte
,$gt
,$lte
,$lt
,$eq
,$ne
,$mod
,$all
,$and
,$or
,$nor
,$not
,$size
,$type
, и$regex
, и стремится быть API совместим с фильтрацией сбора MongoDB.источник
Это должно сработать , jsfiddle
источник
Убедитесь, что вы приводите идентификатор объекта к целому числу, если вы проверяете на строгое равенство:
демонстрация
источник
Если вы используете подчеркивание js, легко удалить объект по ключу. http://underscorejs.org . Пример:
источник