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);