我正在尝试创建一个removeAll()
函数,它将删除数组中所有具有特定值的元素(而不是索引)。
棘手的部分在于,当我们对循环进行任何更改时,索引往往会发生变化(使其非常难以按照我们想要的方式工作),而且每次进行更改时重新启动循环在大型数组上非常低效。
到目前为止,我编写了自己的arr.indexOf
函数(用于支持旧版IE),它看起来像这样:
function arrFind(val, arr) {
for (var i = 0, len = arr.length, rtn = -1; i < len; i++) {
if (arr[i] === val) {
return i;
}
}
return -1;
}
像这样删除元素很容易:
var myarray = [0, 1, 2, 3, 4];
var tofind = 2;
var stored_index = arrFind(tofind, myarray);
if (stored_index != -1) {
myarray.splice(stored_index, 1);
}
alert(myarray.join(",")); //0,1,3,4
然而,正如我之前指出的,当我们在循环时这样做会遇到麻烦。
有什么正确的方法可以在循环过程中正确地删除数组项吗?