Как удалить несколько элементов массива по значению?

Я пытаюсь создать функцию 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

Однако, поскольку Я уже указывал ранее, что когда мы делаем это во время цикла, у нас возникают проблемы.

Есть идеи, как правильно удалять элементы массива при просмотре в цикле?

17
задан ajax333221 29 May 2012 в 21:08
поделиться