I'm trying to eliminate the product added to the cart using the "-" button when the quantity reaches 1 unit. I hope someone can help me, I've been looking for a solution for two days. Thanks in advance.
//changeNumber
function changeNumber(action, id){
cart = cart.map((item)=> {
let = oldNumber = item.numberOfUnits;
if(item.id === id){
if (action === "meno" && item.numberOfUnits >1) {
oldNumber--
} else if (action === "piu") {
oldNumber++
}
if (action === "meno" && item.numberOfUnits === 1){
console.log("delete")
console.log(cart.splice(item.id, 1));
}
updateCart();
}
return {
...item,
numberOfUnits: oldNumber,
}
});
updateCart();
}
The map function will not let you delete elements while it is looping.
There are two approches:
delete cart[index]function changeNumber(action, id) {
var toRemove = null;
var index = 0;
[...]
// Instead of the two console.logs
toRemove = index;
[...]
// At the end of the map lambda
index++;
[...]
// At the end of the changeNumber function
if (toRemove !== null)
delete cart[toRemove];
}
Instead of an array, use an object {id: item}. This allows you to access and modify a specific element without having to loop through everything.
var cart = {};
function addToCart(item) {
if (item.id in cart) // Check if the item is already in the cart
cart[item.id].numberOfUnits++;
else {
cart[item.id] = item; // You may want to copy the item instead of directly adding it
item.numberOfUnits = 1; // May be unnecessary or unwanted, depending on your system
}
}
function removeFromCart(item) {
if (!(item.id in cart)) // If the item is already not in the cart
return false; // The removal was already done
cart[item.id].numberOfUnits--;
if (cart[item.id].numberOfUnits <= 0) // The less-than is unnecessary, but a good check anyway
delete cart[item.id];
return true; // The removal was successful
}
// Example
addToCart({id: 5});
addToCart({id: 5});
addToCart({id: 7});
console.log(removeFromCart({id: 5})); // True; there was an item to remove
console.log(removeFromCart({id: 7})); // True; there was an item to remove
console.log(removeFromCart({id: 7})); // False; there was no item
console.log(cart);