4

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

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]throws typeof框架中的匹配错误。

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

4

5 回答 5

5

反转循环:

for(var i=myArray.length-1;i>=0;i--){
    if(myArray[i] == "b")
        myArray.splice(i,1)
}
于 2015-10-22T15:08:01.393 回答
1

使用过滤功能:

var myArray = ["a","b","c","d","e"];
myArray.filter(function(item) {
    return item !== "b";
});
于 2015-10-22T15:04:49.923 回答
1

如果您必须使用splice,那么您可以i在循环中递增,如果项目被删除,则根本不递增:

for(var i = 0; i < myArray.length;) {
  if(myArray[i] == "b") {
    myArray.splice(i, 1);
  } else {
    ++i;
  }
}
于 2015-10-22T15:07:46.003 回答
1

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

var myArray = ["a","b","c","d","e"];
var myNewArray = myArray.filter(function(elem) { return elem !== "b"; });
于 2015-10-22T15:03:48.227 回答
0

只需将 from 替换ii++您的myArray.splice(i,1)

for(var i = 0; myArray[i]; i++){
    if(myArray[i] == "b")
        myArray.splice(i++,1)
}
于 2015-10-22T15:20:12.273 回答