首页 > 代码库 > 关于Javascript splice方法的一个坑。

关于Javascript splice方法的一个坑。

w3c相关文档:http://www.w3school.com.cn/jsref/jsref_splice.asp

bug:购物车计算价格的时候。加商品没问题,减商品的时候价格总是计算错误。

经排查发现在减商品计算总价的时候调用了splice方法,导致正在循环的数组发生了改变,价格计算错误。

修改方法:总价计算完成的时候再操作数组。

上代码:

 1 //错误代码
 2 $.each(categoryJson.shop_cart_consume,function (i,prodItem) { 
 3     //S_IS_NEW_USER_PARSE 1新用户  2老用户
 4     if(S_IS_NEW_USER_PARSE == ‘1‘ && parseInt(prodItem.unit_price_discount) > 0){
 5         totalPrice += Number(prodItem.unit_price_discount * prodItem.count);
 6     }else{
 7         totalPrice += Number(prodItem.unit_price *prodItem.count);
 8     }
 9     if(prodItem.ware_sku_id == product.ware_sku_id){
10         prodItem.count --;
11         if (prodItem.count <= 0){
12             categoryJson.shop_cart_consume.splice(i,1);
13         }else{
14             categoryJson.shop_cart_consume[i] = prodItem;
15         }
16     }
17 });
 1 //正确代码
 2 //存放数组中减去元素的下标。
 3 var arrayIndex;
 4 //用变量 来标识从0开始的下标。
 5 var beginIndex = 0;
 6 $.each(categoryJson.shop_cart_consume,function (i,prodItem) { 
 7     //S_IS_NEW_USER_PARSE 1新用户  2老用户
 8     if(S_IS_NEW_USER_PARSE == ‘1‘ && parseInt(prodItem.unit_price_discount) > 0){
 9         totalPrice += Number(prodItem.unit_price_discount * prodItem.count);
10     }else{
11         totalPrice += Number(prodItem.unit_price *prodItem.count);
12     }
13     if(prodItem.ware_sku_id == product.ware_sku_id){
14         prodItem.count --;
15         if (prodItem.count <= 0){
16             // categoryJson.shop_cart_consume.splice(i,1);
17             arrayIndex = i;
18         }else{
19             categoryJson.shop_cart_consume[beginIndex] = prodItem;
20             beginIndex++;
21         }
22     }
23 });
24 categoryJson.shop_cart_consume.splice(arrayIndex,1);

 

关于Javascript splice方法的一个坑。