假设我有一个这样的数组:
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
循环,所以我假设有一个正确的方法可以解决这个问题吗?
答案 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)
}