如何循环收缩数组

时间:2015-10-22 15:01:20

标签: javascript arrays for-loop array-splice

假设我有一个这样的数组:

myArray = ["a","b","c","d","e"]

我想循环查找特定值并删除它们。

for(var i=0;i<myArray.length;i++){
    if(myArray[i] == "b")
        myArray.splice(i,1)
}

问题在于,splice从数组中删除了项目,并且删除了一个项目前面的所有项目,向下移动索引号,因此myArray.length被实例化为5但在splice之后myArray的长度仅为4,for循环失败,因为myArray[4]在框架中抛出了匹配错误类型。

我使用这种方式工作的框架,这就是我使用这种项目删除技术的原因,我的问题是如何以正确的方式做到这一点?框架使用splice方法,我使用for循环,所以我假设有一个正确的方法可以解决这个问题吗?

5 个答案:

答案 0 :(得分:4)

扭转循环:

for(var i=myArray.length-1;i>=0;i--){
    if(myArray[i] == "b")
        myArray.splice(i,1)
}

答案 1 :(得分:1)

考虑使用filter()来确定您想要的元素。例如:

var myArray = ["a","b","c","d","e"];
var myNewArray = myArray.filter(function(elem) { return elem !== "b"; });

答案 2 :(得分:1)

使用filter功能:

var myArray = ["a","b","c","d","e"];
myArray.filter(function(item) {
    return item !== "b";
});

答案 3 :(得分:1)

如果您必须使用splice,那么您可以在循环中增加i,如果删除该项,则不会增加它:

for(var i = 0; i < myArray.length;) {
  if(myArray[i] == "b") {
    myArray.splice(i, 1);
  } else {
    ++i;
  }
}

答案 4 :(得分:0)

只需从i

中的i++替换为myArray.splice(i,1)即可
for(var i = 0; myArray[i]; i++){
    if(myArray[i] == "b")
        myArray.splice(i++,1)
}