[JS]应用splice删除多元素时出现的坑

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JS]应用splice删除多元素时出现的坑相关的知识,希望对你有一定的参考价值。

-------------------------------------------------------------------------------------

先看一个片段:

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:http://www.cnblogs.com/farwish/p/5204370.html 

以上是关于[JS]应用splice删除多元素时出现的坑的主要内容,如果未能解决你的问题,请参考以下文章

数组的splice 与 slice有啥区别

js删除数组中的元素delete和splice的区别

js删除数组中的元素delete和splice的区别

js数组删除某个元素

js splice 从数组某位置 删除或增加元素

Easyui中使用jquery或js动态添加元素时出现的样式失效的解决方法