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

Fynn

Non ho capito bene cos'hanno di differente le due funzioni e cosa facciano...

chalda

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 :)

Roland

Ciao, vorrei segnalarti un errore che mi appare quando uso l'ultima funzione (quella cerca ed elimina)

array is not defined
[Interrompi per questo errore] this.splice(array.indexOf(el), 1);
thinkIT

Funzione corretta:

Array.prototype.removeEl = function (el) {
    this.splice(this.indexOf(el), 1);
};
chalda

Grazie!

Luca
Array.prototype.removeEl = function (el) {
    this.splice(this.indexOf(el), 1);
};

// Esempio di utilizzo:
var ar = ['a', 'b', 'c', 'd', 'e'];
ar.removeEl('c'); // Ora ar sarà ['a','b','d','e']

Così funziona ;)

chalda

Grazie!

Antonio

una piccola correzione

Array.prototype.removeEl = function(el) { this.splice(this.indexOf(el), 1); };
chalda

Grazie!

Pierpaolo

Ok ci sono riuscito finalmente xD

Lascia un commento