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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM