关于Javascript splice方法的一个坑。
Posted 勇猛的小黑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于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方法的一个坑。的主要内容,如果未能解决你的问题,请参考以下文章