Задать вопрос
Chupachar
@Chupachar
front-end dev

Как удалить объекты с одинаковым id?

Всем привет, в задаче по клику нужно удалить из двух массивов names и price два объекта которые связаны одним id (если у кликнутого names id: 1, то удаляются 2 объекта массивов names с id: 1 и price с id: 1). Данный функционал в принципе отрабатывает но проблема в том, что если добавятся два объекта с одинаковыми id (данное заявление от меня не зависит), то в price удалятся все объекты имеющие одинаковый id. Как можно расширить данный функционал для того чтобы удалялись объекты с актуальным id в не зависимости от дублирования?
Cсылка:
https://jsfiddle.net/7kdegav0/3/

Код:
let names = [{
    id: 1,
    name: 'Jack'
  },
  {
    id: 1,
    name: 'Bob',
  },
  {
    id: 2,
    name: 'John'
  }
]

let price = [{
    id: 1,
    price: 100,
  },
  {
    id: 1,
    price: 100
  },
  {
    id: 2,
    price: 150
  }
]

 // по факту при попытке удаления условно 'Bob' с id: 1, в price удалятся все объекты имеющие id: 1

function removeItem(e) {
  if (e.target.classList.contains("close")) {
    let info = e.target.closest(".item");
    let idx = [...block.children].findIndex(
      (el) => el.querySelector(".close") == e.target
    );
    deleteState(idx);
  }
}

function deleteState(index) {
  if (index > -1) {
    const id = names[index].id;
    price = price.filter(
      (i) => i.id !== id
    );
    names.splice(index, 1);
  }
}
  • Вопрос задан
  • 300 просмотров
Подписаться 1 Простой 4 комментария
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
// вместо
    price = price.filter(
      (i) => i.id !== id
    );

// попробуйте
  const priceIndex = price.findIndex(({ id: priceId }) => priceId === id);
  if (priceIndex > -1) price.splice(priceIndex, 1);
и будет удаляться только один из price, первый попавшийся с соотв. id.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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