Как добавлять обьект в массив проверяя его на наличие, и если обьект есть в массиве просто увеличивать его свойство count, а если нет тогда пушить?
Я делаю небольшой сайт доставки(учебный) на React.js. Ни как не могу справиться с задачей , может кто подскажет.
В общем есть state в котором есть корзина с купленными товарами (в виде массива )
Функция addToBasketHandler принимает объект и пушит его в массив корзины купленных продуктов , проверяя его на совпадение. Если объект уже находиться в корзине то нужно увеличивать его свойство count на единицу.
Если его нет в массиве тогда пушим, как обновить свойство если он есть в массиве
addToBasketHandler = (product) => {
//product = {title: '', price: 2323, id: 23, count:1}
this.setState(({ basket }) => {
//basket = [ {},{},{},{} ]
const newBasket = [...basket]
const newProduct = { ...product }
const foundItem = newBasket.some((el) => el.id === product.id)
if (foundItem) {
// newProduct.count += 1
// newBasket.push(newProduct)
// не работает надлежащим образом
}
if (!foundItem) {
newBasket.push(newProduct)
}
return {
basket: newBasket,
}
})
}
Ответы (1 шт):
Как вариант, чтобы найти индекс элемента с определенным значением свойства в массиве объектов, можно использовать map + indexOf.
const productIndex = newBasket.map(item => item.id).indexOf(product.id)
Если productIndex будет равен -1, тогда такого товара еще не было и надо делать вставку в массив: newBasket.push(newProduct).
В любом другом случае это будет индекс имеющегося элемента. Значит можно будет увеличить его счетчик: newBasket[productIndex].count += newProduct.count.