下单后移除购物车商品的小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()
}

0

7七月

2020-12-21

确实有这个问题,感谢指出

0

Java全栈工程师

从Java到全栈,开发带SKU的真实企业级电商项目(附赠整套UI框架,配套升级Vue3.0内容)

2075 学习 · 3058 问题

查看课程