@Alex10214

Как правильно проверить есть ли объект в массиве и если его нет, то добавить, а если есть, то просто удалить объект из массива?

Приветствую, е меня есть массив:
const users = [
      {
        name: 'Alex',
        id: 1
      },
      {
        name: 'Ivan',
        id: 2
      },
      {
        name: 'Anna',
        id: 3
      }
    ];

И ко мне прилетел объект:
{
        name: 'Vlad',
        id: 4
      }


я должен проверить в массиве есть ли объект с таким id и если нет, то добавить, а если есть, то просто удалить объект из массива. Условно если ко мне прилетит опять объект с id '3', то я должен вернуть массив со всеми пользователями кроме Анны. Вот мой код:
filterFunc(obj) {
    let check;

    if (this.arr.length) {
      check = this.arr.find((elem) => elem.id === obj.id);
    }

    if (check === undefined) {
      this.arr.push(obj);
    } else {
      this.arr = this.arr.filter((elem) => elem.id !== obj.id);
    }

    return arr;
  }


Все работает, но сам код оставляет желать лучшего, можете подсказать более правильную запись?
  • Вопрос задан
  • 429 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nolis
@Nolis
it-гопник
как вариант:

const haveKey = users.some(item => item.id === newItem.id)

if (!haveKey) {
  users.push(newItem)
}
else {
 users.forEach((item, index) => {
   if (item.id === newItem.id) {
     users.splice(index, 1)
   }
 }) 
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы