[JS]应用splice删除多元素时出现的坑
2016-02-21 05:08
357 查看
-------------------------------------------------------------------------------------
先看一个片段:
上面两行代码完全没有问题,能达到我们想要的效果。
假如变成了下面这种情况:
运行一下,我们看到了不是我们想要的结果,原因是执行一次splice,原数组就被更改过了,索引数组的索引重新排列整齐,这样我们记录的老的排列索引就对不上了。
原来是这样。
那么我们现在需要修改一下重点splice部分的代码:
原理是我们缩减索引值,来达到和要删除元素的索引对上的目的。
Link:/article/5289439.html
先看一个片段:
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.splice(2,2); # Banana,Orange
上面两行代码完全没有问题,能达到我们想要的效果。
假如变成了下面这种情况:
var origin=["aa","bb","cc","dd"]; var has = ["bb", "cc"]; var _index = []; for (i in origin) { # 这里或者使用for..in,不是重点 if ($.inArray(origin[i], has) != -1) { _index.push(i); } } # 重点来了 for (j in _index) { origin.splice(_index[j], 1); } console.log(origin); # 现在会输出我们想要的结果 ["aa", "dd"] 吗?
运行一下,我们看到了不是我们想要的结果,原因是执行一次splice,原数组就被更改过了,索引数组的索引重新排列整齐,这样我们记录的老的排列索引就对不上了。
原来是这样。
那么我们现在需要修改一下重点splice部分的代码:
var k = 0; for (j in _index) { origin.splice(_index[j] - k, 1); k++; }
原理是我们缩减索引值,来达到和要删除元素的索引对上的目的。
Link:/article/5289439.html
相关文章推荐
- JavaScript 笔记 11 - 数组(Array)对象
- 什么是作用域链,什么是原型链,它们的区别,在js中它们具体指什么?
- 浏览器检测JS代码(兼容目前各大主流浏览器)
- JS中Eval解析JSON字符串的一个小问题
- JSON简介以及用法汇总
- JavaScript编程学习技巧汇总
- javascript+HTML5自定义元素播放焦点图动画
- 浅谈javascript的call()、apply()、bind()的用法
- 详谈javascript异步编程
- jsonrpc环境搭建和简单实例
- JavaScript 闭包学习笔记
- 优化JS代码性能
- JavaScript基础
- JSP-include指令
- JavaScript实现的网页放大镜效果
- JavaScript实现的网页放大镜效果
- javascript event(事件对象)详解
- js正则表达式语法
- js动画学习(五)
- JSP-page指令学习