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

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

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

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

上代码:

 //错误代码
$.each(categoryJson.shop_cart_consume,function (i,prodItem) {
//S_IS_NEW_USER_PARSE 1新用户 2老用户
if(S_IS_NEW_USER_PARSE == '1' && parseInt(prodItem.unit_price_discount) > 0){
totalPrice += Number(prodItem.unit_price_discount * prodItem.count);
}else{
totalPrice += Number(prodItem.unit_price *prodItem.count);
}
if(prodItem.ware_sku_id == product.ware_sku_id){
prodItem.count --;
if (prodItem.count <= 0){
categoryJson.shop_cart_consume.splice(i,1);
}else{
categoryJson.shop_cart_consume[i] = prodItem;
}
}
});
 //正确代码
//存放数组中减去元素的下标。
var arrayIndex;
//用变量 来标识从0开始的下标。
var beginIndex = 0;
$.each(categoryJson.shop_cart_consume,function (i,prodItem) {
//S_IS_NEW_USER_PARSE 1新用户 2老用户
if(S_IS_NEW_USER_PARSE == '1' && parseInt(prodItem.unit_price_discount) > 0){
totalPrice += Number(prodItem.unit_price_discount * prodItem.count);
}else{
totalPrice += Number(prodItem.unit_price *prodItem.count);
}
if(prodItem.ware_sku_id == product.ware_sku_id){
prodItem.count --;
if (prodItem.count <= 0){
// categoryJson.shop_cart_consume.splice(i,1);
arrayIndex = i;
}else{
categoryJson.shop_cart_consume[beginIndex] = prodItem;
beginIndex++;
}
}
});
categoryJson.shop_cart_consume.splice(arrayIndex,1);

关于Javascript splice方法的一个坑。的更多相关文章

  1. JavaScript中sort方法的一个坑(leetcode 179. Largest Number)

    在做 Largest Number 这道题之前,我对 sort 方法的用法是非常自信的.我很清楚不传比较因子的排序会根据元素字典序(字符串的UNICODE码位点)来排,如果要根据大小排序,需要传入一个 ...

  2. JavaScript splice() 方法

    定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 例子 1 在本例中,我们将创建一个新数组,并向其添加一个元素: <script ...

  3. Javascript:splice() 方法浅析

    定义和用法: splice()方法用于插入.删除或替换数组的元素. 注:该方法会改变原始数组,splice() 方法与 slice() 方法的作用是不同的,splice() 方法会直接对数组进行修改 ...

  4. Javascript:splice()方法实现对数组元素的插入、删除、替换及去重

    定义和用法 splice() 方法向/从数组中添加/删除项目,然后返回被删除的项目. 注释:该方法会改变原始数组. 语法: Array.prototype.splice(index,count[,el ...

  5. JavaScript正则表达式replace的一个坑

    题图来自:https://wallhaven.cc/w/md353k 经常听大家说JavaScript是魔法语言,咱却没有什么深刻体会.直到这回踩到这个坑,我终于醒悟了,JavaScript果然来自霍 ...

  6. Java 字符串Split方法的一个坑

    java字符串的split,只传一个参数,后面空白的字符串会被忽略: public static void main(String[] args) { String str = "ab|c| ...

  7. 详解 JavaScript 中 splice() 方法

    splice() 方法是一个比较少用的方法,但是功能确实很好,并且在我们 coding 的时候,经常有需要 splice() 方法,先介绍一下该方法. 在 JavaScript 中 splice() ...

  8. 数组中的元素 增加push用法 unshift() 方法 和减少pop() 方法 shift() 和其他位置增删 splice() 方法 join() 方法 reverse() 方法 sort() 方法

    push用法 push 英 [pʊʃ] 美 [pʊʃ] vt. 推,推动; vt. 按; 推动,增加; 对…施加压力,逼迫; 说服; n. 推,决心; 大规模攻势; 矢志的追求 定义和用法 push( ...

  9. 松软科技web课堂:JavaScript 数组方法

    JavaScript 数组的力量隐藏在数组方法中. 把数组转换为字符串 JavaScript 方法 toString() 把数组转换为数组值(逗号分隔)的字符串. 实例 var fruits = [& ...

随机推荐

  1. Linux下查看文件内容的命令

    查看文件内容的命令: cat     由第一行开始显示内容,并将所有内容输出 tac     从最后一行倒序显示内容,并将所有内容输出 more    根据窗口大小,一页一页的现实文件内容 less ...

  2. su root 和su - root 的区别

    su - root  is   the same as su - just like login as root, then the shell is login shell,which mean i ...

  3. java 在接口里函数不能重载?

    项目里使用hession远程调用serviceRemote接口,而serviceRemote接口里有两个save方法,参数分别是CpCredential对象和List,但运行发现会报莫名其妙的错. 后 ...

  4. PHP预编译处理技术简介

    1.提高数据库的效率:减少编译次数,减少连接次数.当出现当量操作sql语句,比如大量将数据插入数据库中,原来的那种单个执行sql语句或者批量执行sql语句的做法,显然是不可行的,因为无论是单个执行还是 ...

  5. 【bzoj4034】[HAOI2015]树上操作

    题目描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 :把某个节点 x 为根的子树中所有点的点权都 ...

  6. oracle数据库表空间扩容方法

    1. 先查询表空间在物理磁盘上存放的位置,注意使用sysdba的账号登陆. SELECT tablespace_name, file_id, file_name, ), ) total_space F ...

  7. mysql基础面试

    php面试题之五--MySQL数据库(基础部分) 五.MySQL数据库 mysql_num_rows() mysql_affected_rows() 这两个函数都作用于 mysql_query($qu ...

  8. iOS开发——UI进阶篇(七)程序启动原理、打电话、发短信

    一.Info.plist常见的设置 1.建立一个工程后,会在Supporting files文件夹下看到一个“工程名-Info.plist”的文件,该文件对工程做一些运行期的配置,非常重要,不能删除 ...

  9. Python验证Url地址的正则表达式

    如下是django中做url验证的正则表达式: regex = re.compile( r'^(?:http|ftp)s?://' # http:// or https:// r'(?:(?:[A-Z ...

  10. 500 OOPS: vsftpd: both local and anonymous access

    配置ftp服务器,有如下报错 C:\netos74\bin>ftp 10.20.100.252Connected to 10.20.100.252.500 OOPS: vsftpd: both ...