首页 > 代码库 > 关于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方法的一个坑。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。