所以我在Javascript中有这个Cart对象...我想要做的是检查给定购物车中是否有物品。
我这样做了
SubList
它工作正常,但我想知道是否有更快,更有效的方法这样做......你会建议什么?
答案 0 :(得分:2)
使用Array#find
方法。最大的好处是,如果在数组中找到该项,它不会进一步遍历数组(forEach
执行,并且你不能阻止它这样做)。
let item = {id: this.id, name: this.name, price: this.price, amount: this.amount};
let listItem = this.cart.items.find(element => element.id === item.id)
if (!listItem) {
this.cart.items.push(item);
} else {
listItem.amount += item.amount;
}
答案 1 :(得分:1)
更有效的方法是使用适当的数据结构(Map
)而不是数组,例如:
let basket = new Map();
function add(product) {
if(basket.has(product.id))
basket.get(product.id).amount += product.amount;
else
basket.set(product.id, {...product});
}
add({id:1, name: 'bread', amount:1});
add({id:2, name: 'butter', amount:2});
add({id:1, name: 'bread', amount:2});
add({id:1, name: 'bread', amount:1});
console.log([...basket.values()])

这样,您就可以通过产品ID保证O(1)查找。
答案 2 :(得分:0)
试试吧
let item = { id: this.id, name: this.name, price: this.price, amount: this.amount };
typeof ( this.cart.items.find( a => { return a.id === item.id ? ( a.amount += item.amount, true ) : false; } ) ) !== 'object' ? this.cart.items.push( item ) : undefined;