Я задал аналогичный вопрос: как удалить и сохранить объект из массива
Он работал, когда мне просто нужно было проверить тип объекта ("Группа" или "Организация"). Однако мне нужно получить более конкретную информацию сейчас и вам нужно найти объекты по идентификатору и удалить/повторно добавить их в массив.
Однако, когда я пытаюсь адаптировать код для проверки идентификатора объекта, я либо не могу найти и удалить идентификатор, либо я удалю все объекты из массива.
// re-add Group to networks (This works great)
if (isChecked === 'checked') {
var group_obj = {
'id': name
}
networks.push(group_obj);
// remove Group from networks (Problem exist in the else if)
} else if (isChecked === undefined) {
var group_obj = {
'id': name
}
var removeItem = group_obj;
var obj;
networks = $.grep(networks, function(o,i) {
console.log('removeItem.id = '+removeItem.id);
console.log('name = '+name);
if (removeItem.id === name) {
obj = o;
return true;
}
return false;
}, true);
}
console.log(networks);
Консоль
Как выглядит мой массив Array, прежде чем я начну действовать с помощью флажков:
[Object, Object, Object]
0: Object
count: 1
id: 6
label: "Who"
type: "Organization"
1: Object
id: 12622
2: Object
id: 13452
Если флажок в соответствующей группе не отмечен, текущий код выше удалит все объекты из массива, а не только указанный объект группы.
[]
Когда флажок снова будет установлен, выбранная группа войдет в массив.
Я также попробовал это сначала:
var obj;
networks = $.grep(networks, function(o,i) {
return o.id === name ? ((obj = o), true) : false;
}, true);
Однако он не находит и не удаляет объект в массиве с указанным id (name
), но оставляет сети Array нетронутыми.
Как бы вы могли написать инструкцию else if
для удаления только объекта с указанным идентификатором и оставить остальные объекты в массиве?
Вы должны использовать фильтр, а не grep, например:
networks = networks.filter(function (o,i) {
return o.id !== name ? ((obj = o), true) : false;
});