Нажмите или удалите объект из массива, если объект находится в массиве в JS

1

Я ищу более элегантный и эффективный способ переключения объекта в массив.

Итак, мой приезд:

let arr = [
   {id: 2},
   {id: 3},
   ...
] 

Теперь я делаю это так:

if (arr.find(function(element) { return element.id === upload.id } )) {
    arr = arr.filter(function(element) {
        return element.id !== upload.id;
    });
}
else {
    arr.push(upload)
}
Теги:

3 ответа

2

Если вы часто переключаете объект, вы можете использовать хеш-таблицу для индексов массива.

var hash = Object.create(null);

function update(array, item) {
    if (hash[item.id] !== undefined) {
        array.slice(hash[item.id], 1);
        hash[item.id] = undefined;
    } else {
        hash[item.id] = array.push(item) - 1;
    }
}
1
const toggle = (arr, obj) => arr.includes(obj) ? arr.splice(arr.indexOf(obj), 1) : arr.push(obj);
  • 0
    Ваш вариант не будет работать, потому что он не проверяет идентификатор.
0
const index = arr.findIndex(function(element) { return element.id === upload.id });
if (index > -1) {
    arr.splice(index, 1);
}) else {
    arr.push(upload);
}
  • 1
    Пожалуйста, объясните код, который вы написали
  • 0
    Хорошо, моя идея состоит в том, чтобы найти индекс искомого элемента и, если существует, удалить элемент из массива, используя соединение.
Показать ещё 1 комментарий

Ещё вопросы

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