Rimuovere un elemento da un array
con JavaScript ES6 (ECMAScript > 2015)
Ed eccoci alla classica domanda che inevitabilmente tutti ci poniamo! Come si fa a togliere un elemento da un array in javascript? Beh, per toglierlo dall’inizio o dalla fine si possono usare i semplici .pop() (per togliere l’ultimo) e .shift() (per togliere il primo). Ma come fare per togliere un elemento all’interno?
Purtroppo non esiste una funzione di sistema che lo faccia, quindi dovremmo crearcela noi 🙂
Innanzi tutto vediamo come togliere un elemento da un array.
let array = ['a', 'b', 'c', 'd', 'e'];
console.debug('Il nostro array iniziale:', array);
// Togliamo 1 elemento alla posizione 3
let elemento = array.splice(3, 1);
console.debug('Il nostro elemento rimosso:', elemento);
console.debug('Il nostro array finale:', array);
È possibile togliere ovviamente anche più elementi:
let array = ['a', 'b', 'c', 'd', 'e'];
console.debug('Il nostro array iniziale:', array);
// Togliamo 2 elementi dalla posizione 3
let elemento = array.splice(3, 2);
console.debug('I nostri elementi rimossi:', elemento);
console.debug('Il nostro array finale:', array);
Ora sappiamo come togliere un elemento e sostituirlo, quindi creiamo una funzione prototype all’oggetto Array che tolga l’elemento alla posizione pos e lo restituisca:
Array.prototype.removePos = function (pos) {
return this.splice(pos, 1);
};
// Esempio di utilizzo:
let myArray = ['a', 'b', 'c', 'd', 'e'];
let elemento = myArray.removePos(3);
console.debug('Il nostro elemento rimosso:', elemento);
console.debug('Il nostro array finale:', myArray);
Se invece vogliamo ricercare un elemento (e uno solo, senza duplicati) e toglierlo la funzione sarà la seguente:
Array.prototype.findAndRemove = function (el) {
const index = this.indexOf(el);
if (index > -1) this.splice(index, 1);
};
// Esempio di utilizzo:
let myArray = ['a', 'b', 'c', 'd', 'e', 'c'];
myArray.findAndRemove('c');
console.debug('Il nostro array finale:', myArray);
Se vogliamo ricercare e rimuovere più elementi:
Array.prototype.findAndRemove = function () {
[...arguments].forEach(el => {
const index = this.indexOf(el);
if (index > -1) this.splice(index, 1);
});
};
// Esempio di utilizzo:
let myArray = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];
myArray.findAndRemove('b', 'd');
console.debug('Il nostro array finale:', myArray);
Se invece vogliamo rimuovere proprio tutti gli elementi nell'array ci torna utile il metodo .filter():
let myArray = ['a', 'b', 'c', 'd', 'a', 'b', 'c', 'd'];
let newArray = myArray.filter(el => el !== 'b');
console.debug('Il nostro array finale:', newArray);
Tutto qui 🙂
Commenti
Non ho capito bene cos'hanno di differente le due funzioni e cosa facciano...
Allora... La funzione removePos(x) rimuove l'elemento alla posizione x e lo restituisce, mentre removeEl(x) ricerca nell'array il valore x e lo rimuove. Forse era meglio se facevo gli esempi con array contenenti stringhe invece che numeri... Ora aggiorno :)
Ciao, vorrei segnalarti un errore che mi appare quando uso l'ultima funzione (quella cerca ed elimina)
Funzione corretta:
Grazie!
Così funziona ;)
Grazie!
una piccola correzione
Grazie!
Ok ci sono riuscito finalmente xD
Lascia un commento