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