如何遍历收缩数组
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)
}
假设我有这样一个数组:
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)
}