Как добавлять обьект в массив проверяя его на наличие, и если обьект есть в массиве просто увеличивать его свойство 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 шт):

Автор решения: mrEvgenX

Как вариант, чтобы найти индекс элемента с определенным значением свойства в массиве объектов, можно использовать map + indexOf.

const productIndex = newBasket.map(item => item.id).indexOf(product.id)

Если productIndex будет равен -1, тогда такого товара еще не было и надо делать вставку в массив: newBasket.push(newProduct).

В любом другом случае это будет индекс имеющегося элемента. Значит можно будет увеличить его счетчик: newBasket[productIndex].count += newProduct.count.

→ Ссылка