Javascript-仅当数组中的对象不存在时才将其推送到数组中

Javascript-仅当数组中的对象不存在时才将其推送到数组中,javascript,Javascript,概述: 我在一个页面中有10个添加到购物车按钮10种不同的产品,当用户单击addToCart按钮时,应该将该项目添加到数组this.itemsInCart中,如果该项目在数组中不存在,而数量设置为“1”;但是,如果该项已经存在,则只应增加数组中该项的数量 问题是: 问题在第二次将第二个产品添加到购物车后出现,它会增加该产品的数量,但同时会创建同一对象的新对象,该对象的id相同,数量为1 当前代码: 生成的数组显示问题: 不要往里推。您需要设置一个标志ex.exists,默认为false,当您在中

概述:

我在一个页面中有10个添加到购物车按钮10种不同的产品,当用户单击addToCart按钮时,应该将该项目添加到数组this.itemsInCart中,如果该项目在数组中不存在,而数量设置为“1”;但是,如果该项已经存在,则只应增加数组中该项的数量

问题是:

问题在第二次将第二个产品添加到购物车后出现,它会增加该产品的数量,但同时会创建同一对象的新对象,该对象的id相同,数量为1

当前代码:

生成的数组显示问题:

不要往里推。您需要设置一个标志ex.exists,默认为false,当您在中找到项时,forEach回调会将该标志更新为true

当标志为false时,推送到数组

let flag = false;

this.itemsInCart.forEach(el => {
    if (el.itemId == itemDetails.objectId) {
        el.qty += 1;

        flag = true;

        return false;
    }
})

if (!flag) {
    this.itemsInCart.push({
        itemId: itemDetails.objectId,
        itemName: itemDetails.dishName,
        itemPrice: itemDetails.price,
        qty: 1
    });
}
不要往里推。您需要设置一个标志ex.exists,默认为false,当您在中找到项时,forEach回调会将该标志更新为true

当标志为false时,推送到数组

let flag = false;

this.itemsInCart.forEach(el => {
    if (el.itemId == itemDetails.objectId) {
        el.qty += 1;

        flag = true;

        return false;
    }
})

if (!flag) {
    this.itemsInCart.push({
        itemId: itemDetails.objectId,
        itemName: itemDetails.dishName,
        itemPrice: itemDetails.price,
        qty: 1
    });
}

如果没有同步性问题,请使用find而不是forEach。或者使用对象{}而不是数组[]来保证密钥的唯一性。如果没有同步性问题,请使用find而不是forEach。或者使用对象{}而不是数组[]来保证密钥的唯一性。
let flag = false;

this.itemsInCart.forEach(el => {
    if (el.itemId == itemDetails.objectId) {
        el.qty += 1;

        flag = true;

        return false;
    }
})

if (!flag) {
    this.itemsInCart.push({
        itemId: itemDetails.objectId,
        itemName: itemDetails.dishName,
        itemPrice: itemDetails.price,
        qty: 1
    });
}