我有一个数组:
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]);
}
因为在每次迭代后,每个元素的索引都发生了变化。
那我怎么能这样做呢?
答案 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。这将允许您保持原始数组的完整性,尽管您似乎不希望/需要这样做。