如何遍历收缩数组

How to loop through a shrinking array

假设我有这样一个数组:

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

我想遍历它以找到特定值并将其删除。

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

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

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

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

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

使用filter函数:

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

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

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

反转循环:

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

只需将您的myArray.splice(i,1)

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