下单后移除购物车商品的小bug
来源:10-4 下单后移除购物车商品
Yan雪杉
2020-12-21 12:54:52
在removeCheckedItems这个方法中是通过splice来删除的,这样会存在一个潜在的问题,就是假如现在购物车中存在多个商品的话,通过splice来删除,但是由于是对cartData.items进行正向的遍历,索引i是从小到大的,那么在删除掉第一个item的时候,整个cartData就变短了,这个item后面的元素都往前进了一位,这样在后续的判断中就有可能会漏删掉元素。
首先对cartData.item进行遍历,找出checked为true的元素的索引,通过unshift添加到一个数组indexes中,这样的话indexes数组中就保存了checked为true的item索引,并且是从大到小排列的,然后对indexes进行遍历,按照索引从大到小对cartData.items中的元素进行删除。
2回答
慕无忌2494373
2022-02-26
我也遇到这个问题了。改用filter了
removeCheckedItems() {
const cartData = this._getCartData()
cartData.items = cartData.items.filter(item => {
return !item.checked
})
// for (let i = 0; i < cartData.items.length; i++) {
// if (cartData.items[i].checked) {
// cartData.items.splice(i, 1)
// }
// }
this._refreshStorage()
}
7七月
2020-12-21
确实有这个问题,感谢指出
相似问题