Io ho:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Voglio essere in grado di fare qualcosa del tipo:
array.remove("B");
ma non esiste una funzione di rimozione. Come posso farlo?
Io ho:
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
Voglio essere in grado di fare qualcosa del tipo:
array.remove("B");
ma non esiste una funzione di rimozione. Come posso farlo?
Risposte:
In realtà sto aggiornando questa discussione con una soluzione a 1 riga più recente:
let arr = ['A', 'B', 'C'];
arr = arr.filter(e => e !== 'B'); // will return ['A', 'C']
L'idea è fondamentalmente di filtrare l'array selezionando tutti gli elementi diversi dall'elemento che si desidera rimuovere.
Nota: rimuoverà tutte le occorrenze.
MODIFICARE:
Se si desidera rimuovere solo la prima occorrenza:
t = ['A', 'B', 'C', 'B'];
t.splice(t.indexOf('B'), 1); // will return ['B'] and t is now equal to ['A', 'C', 'B']
Scorrere l'elenco in ordine inverso e utilizzare il .splice
metodo.
var array = ['A', 'B', 'C']; // Test
var search_term = 'B';
for (var i=array.length-1; i>=0; i--) {
if (array[i] === search_term) {
array.splice(i, 1);
// break; //<-- Uncomment if only the first term has to be removed
}
}
L'ordine inverso è importante quando è necessario rimuovere tutte le occorrenze del termine di ricerca. Altrimenti, il contatore aumenterà e salterai gli elementi.
Quando deve essere rimossa solo la prima occorrenza, funzionerà anche quanto segue:
var index = array.indexOf(search_term); // <-- Not supported in <IE9
if (index !== -1) {
array.splice(index, 1);
}
0
non è automaticamente più veloce come è, diciamo, C. Finché si memorizza il limite, ovviamente, il che complicherebbe le cose se si continua dopo il primo incontro (ma non se ci si ferma).
Elenco di una fodera
Risolviamo questo problema per questo array:
var array = ['A', 'B', 'C'];
1. Rimuovere solo il primo: utilizzare Se si è sicuri che l'elemento esiste
array.splice(array.indexOf('B'), 1);
2. Rimuovi solo l'ultimo: Usa Se sei sicuro che l'articolo esiste
array.splice(array.lastIndexOf('B'), 1);
3. Rimuovere tutte le occorrenze:
array = array.filter(v => v !== 'B');
Devi trovare la posizione di ciò che stai cercando con .indexOf()
poi rimuoverlo.splice()
function remove(arr, what) {
var found = arr.indexOf(what);
while (found !== -1) {
arr.splice(found, 1);
found = arr.indexOf(what);
}
}
var array = new Array();
array.push("A");
array.push("B");
array.push("C");
remove(array, 'B');
alert(array);
Questo si prenderà cura di tutte le occorrenze.
Uncaught ReferenceError: array is not defined
. Che c'è?
.indexOf()
. Se si passa found
come secondo argomento alla .indexOf()
chiamata all'interno del ciclo while , gli elementi nell'array che erano già stati controllati e che alla fine non erano uguali non vengono controllati di nuovo: found = arr.indexOf(what, found);
Semplicemente
array.splice(array.indexOf(item), 1);
-1
se non viene trovato nulla e whoops, splice eliminerà 1 elemento dalla fine dell'array
Soluzione semplice (ES6)
Se non hai elementi duplicati
Array.prototype.remove = function(elem) {
var indexElement = this.findIndex(el => el === elem);
if (indexElement != -1)
this.splice(indexElement, 1);
return this;
};
Devi scrivere tu stesso rimuovi. È possibile eseguire il ciclo sull'array, afferrare l'indice dell'elemento che si desidera rimuovere e utilizzare splice
per rimuoverlo.
In alternativa, è possibile creare un nuovo array, eseguire il loop sull'array corrente e, se l'oggetto corrente non corrisponde a ciò che si desidera rimuovere, inserirlo in un nuovo array.
uso:
array.splice(2, 1);
Ciò rimuove un elemento dall'array, a partire dall'indice 2 (3 ° elemento)
array.splice(2,1)
che rimuove 1 elemento all'indice 2 dall'array. controlla https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice per maggiori dettagli
usa array.splice
/*array.splice(index , howMany[, element1[, ...[, elementN]]])
array.splice(index) // SpiderMonkey/Firefox extension*/
array.splice(1,1)
Fonte: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/splice
array
e splice
deve essere un punto.
.indexOf()
e.splice()
dovrebbe fare il trucco. O forse, in alternativa,.filter()
.