Как удалить и повторно добавить определенные объекты по идентификатору в массив [jQuery]

0

Я задал аналогичный вопрос: как удалить и сохранить объект из массива

Он работал, когда мне просто нужно было проверить тип объекта ("Группа" или "Организация"). Однако мне нужно получить более конкретную информацию сейчас и вам нужно найти объекты по идентификатору и удалить/повторно добавить их в массив.

Однако, когда я пытаюсь адаптировать код для проверки идентификатора объекта, я либо не могу найти и удалить идентификатор, либо я удалю все объекты из массива.

// 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 для удаления только объекта с указанным идентификатором и оставить остальные объекты в массиве?

Теги:
object
arrays

1 ответ

3
Лучший ответ

Вы должны использовать фильтр, а не grep, например:

networks = networks.filter(function (o,i) {
     return o.id !== name ? ((obj = o), true) : false;
});
  • 2
    Собирался сказать то же самое. проверьте эту супер простую скрипку для примера: jsfiddle.net/2wKty
  • 0
    Ах, сладкое спасибо! : D это работает

Ещё вопросы

Сообщество Overcoder
Наверх
Меню