Sto cercando di creare una funzione removeAll()
, che rimuoverà tutti gli elementi di una matrice con quel particolare valore (non indice).Come eliminare più elementi di una matrice in base al valore?
La parte difficile arriva quando apportiamo modifiche al ciclo, gli indici tendono a muoversi (rendendo molto difficile farlo funzionare come vogliamo) e, riavviare il ciclo ogni volta che apportiamo modifiche è molto inefficiente su grandi matrici.
Finora, ho scritto il mio arr.indexOf
funzione (ad anziani supporto IE), sembra che questo:
function arrFind(val, arr) {
for (var i = 0, len = arr.length, rtn = -1; i < len; i++) {
if (arr[i] === val) {
return i;
}
}
return -1;
}
E 'facile da rimuovere gli elementi di questo tipo:
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
Tuttavia, come ho sottolineato in precedenza, quando lo facciamo durante il ciclo, ci mettiamo nei guai.
Qualche idea su come rimuovere correttamente gli elementi dell'array mentre lo si scorre?
[pensa che questa domanda relativa] (http://stackoverflow.com/q/3954438/908879) (ma è _non_ un DUP perché la mia domanda riguarda _a problem_ quando si rimuovono gli elementi _multiple_ _inside un loop_) – ajax333221