从JavaScript数组中删除索引数组

时间:2012-04-22 04:49:59

标签: javascript arrays indices

我有一个数组:

var arr = ['A', 'B', 'C', 'D', 'E', 'F', 'G']

我有一系列我希望删除的索引:

var remove = [1, 3, 5]

所以结果是:

arr ==== ['A', 'C', 'E', 'G']

我无法在循环中拼接:

// WRONG
for (i = 0, l = remove.length; i < l; i++) {
    arr.splice(remove[i]);
}

因为在每次迭代后,每个元素的索引都发生了变化。

那我怎么能这样做呢?

5 个答案:

答案 0 :(得分:2)

> arr.filter(function(x,i){return remove.indexOf(i)==-1})
["A", "C", "E", "G"]

为了提高效率,首先将remove转换为对象/哈希表,如下所示:

var removeTable = {}
remove.forEach(function(x){removeTable[x]=true})

> arr.filter(function(x,i){return removeTable[i]})
["A", "C", "E", "G"]

答案 1 :(得分:2)

不要过多改变你的想法 - 最后开始。

A B C D E F ..

当您删除元素5时,它变为..

A B C D E

然后你删除元素3,它变成..

A B C E

这正是你想要的。

答案 2 :(得分:1)

倒计时:

// RIGHT
for (i = (remove.length-1); i >= 0; i--) {
  arr.splice(remove[i]);
}

答案 3 :(得分:1)

从最后开始循环,首先从最高索引中删除元素。

答案 4 :(得分:0)

作为替代建议,您可以使用.push()将要保留的项目发送到第三个阵列。有关基础知识,请参阅here。这将允许您保持原始数组的完整性,尽管您似乎不希望/需要这样做。