Я пытаюсь сделать функцию 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
Однако, как я уже указывал ранее, при выполнении этого цикла мы сталкиваемся с проблемами.
Любые идеи о том, как правильно удалить элементы массива при прохождении через него?