Come rimuovere l'elemento da un array in JavaScript?


340
var arr = [1,2,3,5,6];

Rimuovi il primo elemento

Voglio rimuovere il primo elemento dell'array in modo che diventi:

var arr = [2,3,5,6];

Rimuovi il secondo elemento

Per estendere questa domanda, cosa succede se desidero rimuovere il secondo elemento dell'array in modo che diventi:

var arr = [1,3,5,6];

1
slice(start, end)non "how_many_to_remove"
— seanjacob,

2
@Ped arr.unshift () NON RIMUOVE, ma "Aggiunge uno o più elementi all'inizio di un array"
— psycho brm,

@seanjacob splicenon slicecredo.
— Animesh Singh,

Risposte:


346

Per una soluzione più flessibile, utilizzare la splice()funzione. Ti consente di rimuovere qualsiasi elemento in una matrice in base al valore dell'indice:

var indexToRemove = 0;
var numberToRemove = 1;

arr.splice(indexToRemove, numberToRemove);

12
E la domanda successiva: arr.splice(1,1)per il secondo elemento.
— Slebetman,

1
Preferisco splice()più shift()perché è più flessibile. Potrei voler fare qualcosa di diverso in futuro, e non sempre voglio rimuovere solo un elemento, o anche il primo elemento.
— Gabriel McAdams,

14
Se vieni qui da Google: Gabriel preferisce questa risposta, ma dovresti essere consapevole che c'è anche shift (), vedi la risposta di Joseph.
— SHernandez,

668

shift()è l'ideale per la tua situazione. shift()rimuove il primo elemento da un array e restituisce quell'elemento. Questo metodo modifica la lunghezza dell'array.

array = [1, 2, 3, 4, 5];

array.shift(); // 1

array // [2, 3, 4, 5]

Funziona, ma rimuoverà solo il primo elemento dell'array.
— Gabriel McAdams,

53
@Gabriel: non era esattamente questa la domanda? Io preferisco shift()al splice(..., ...)dato che è molto più esplicito, diretto.
— Bruno Reis,

6
Correzione: restituisce il primo elemento, non un nuovo array meno il primo elemento, come per il collegamento fornito :)
— DanH,

Mentre l'esempio di codice è corretto, la descrizione è fuorviante: (a) come sottolineato da @DanH, è il primo elemento che viene restituito , e (b) il fatto che l' array di input sia modificato non è chiarito. Pertanto, la risposta di Ped è superiore.
— mklement0,

2
shiftè più veloce a meno che non si stiano combinando elenchi di grandi dimensioni jsperf.com/splice-vs-shift3 e jsperf.com/splice-vs-shift2
— kcathode

61

Il Array.prototype.shiftmetodo rimuove il primo elemento da un array e lo restituisce. Modifica l'array originale.

var a = [1,2,3]
// [1,2,3]
a.shift()
// 1
a
//[2,3]

4
Un grande miglioramento sulla risposta di Joseph Silvashy: nessuna incoerenza tra descrizione e codice.
— mklement0

48
arr.slice(begin[,end])

non è distruttivo, splice e shift modificheranno l'array originale


3
Sì per non mutare. Questo dovrebbe essere più visibile.
— utente

16

Ha scritto un piccolo articolo sull'inserimento e l'eliminazione di elementi in posizioni arbitrarie negli array Javascript.

Ecco il piccolo frammento per rimuovere un elemento da qualsiasi posizione. Ciò estende la classe Array in Javascript e aggiunge il metodo remove (index).

// Remove element at the given index
Array.prototype.remove = function(index) {
    this.splice(index, 1);
}

Quindi, per rimuovere il primo elemento nell'esempio, chiama arr.remove ():

var arr = [1,2,3,5,6];
arr.remove(0);

Per rimuovere il secondo elemento,

arr.remove(1);

Ecco un piccolo articolo con i metodi insert ed delete per la classe Array.

Fondamentalmente questo non è diverso dalle altre risposte usando splice, ma il nome splicenon è intuitivo e se hai quella chiamata su tutta la tua applicazione, rende il codice più difficile da leggere.



7

Altre risposte sono grandi, volevo solo aggiungere una soluzione alternativa con ES6la funzione Array: filter.

filter() crea un nuovo array con elementi che rientrano in un determinato criterio da un array esistente.

Quindi puoi usarlo facilmente per rimuovere elementi che non soddisfano i criteri. I vantaggi di questa funzione sono che è possibile utilizzarlo su array complessi non solo su stringa e numero.

Qualche esempio :

Rimuovi il primo elemento :

// Not very useful but it works
function removeFirst(element, index) {
  return index > 0;
}
var arr = [1,2,3,5,6].filter(removeFirst); // [2,3,4,5,6]

Rimuovi il secondo elemento :

function removeSecond(element, index) {
  return index != 1;
}
var arr = [1,2,3,5,6].filter(removeSecond); // [1,3,4,5,6]

Rimuovi elemento dispari :

function removeOdd(element, index) {
  return !(element % 2);
}
var arr = [1,2,3,5,6].filter(removeOdd); [2,4,6]

Rimuovi gli articoli non disponibili

const inventory = [
  {name: 'Apple', qty: 2},
  {name: 'Banana', qty: 0},
  {name: 'Orange', qty: 5}
];

const res = inventory.find( product => product.qty > 0);



2

È possibile utilizzare la funzione di assegnazione di destrutturazione ES6 con un operatore di riposo. Una virgola indica dove si desidera rimuovere l'elemento e l'operatore restante (... arr) per fornire gli elementi rimanenti dell'array.

const source = [1,2,3,5,6];

function removeFirst(list) {
   var  [, ...arr] = list;
   return arr;
}
const arr = removeFirst(source);
console.log(arr); // [2, 3, 5, 6]
console.log(source); // [1, 2, 3, 5, 6]


1

Array.splice()ha la proprietà interessante che non si può usare per rimuovere il primo elemento. Quindi, dobbiamo ricorrere a

function removeAnElement( array, index ) {
    index--;

    if ( index === -1 ) {
        return array.shift();
    } else {
        return array.splice( index, 1 );
    }
}

3
Array.splice (0,1) rimuove il primo elemento. Secondo ogni altra risposta qui, e secondo developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . Inoltre, perché qualcuno dovrebbe passare -1 per rimuovere il primo elemento? Non passerebbero 0?
— pietra,

@skypecakes Non posso parlare della validità della giuntura sull'indice 0, ma qui l'indice è decrementato prima di quel controllo, quindi sarebbe stato 0 quando passato.
— Jake T.

Sì, sicuramente può rimuovere il primo elemento. L'ho provato qui: jsfiddle.net/sijpkes/d87rcLob/2
— sijpkes

1

Soluzione dattiloscritta che non muta l'array originale

function removeElementAtIndex<T>(input: T[], index: number) {
  return input.slice(0, index).concat(input.slice(index + 1));
}

1

Esistono diversi modi per rimuovere un elemento da una matrice. Vorrei sottolineare le opzioni più utilizzate di seguito. Sto scrivendo questa risposta perché non sono riuscito a trovare una ragione adeguata su cosa usare da tutte queste opzioni. La risposta alla domanda è l'opzione 3 ( Splice () ).

1) MAIUSC (): rimuove il primo elemento dall'array originale e restituisce il primo elemento

Vedi riferimento per Array.prototype.shift () . Utilizzare questo solo se si desidera rimuovere il primo elemento e solo se si va bene con la modifica dell'array originale.

const array1 = [1, 2, 3];

const firstElement = array1.shift();

console.log(array1);
// expected output: Array [2, 3]

console.log(firstElement);
// expected output: 1

2) SLICE () - Restituisce una copia dell'array, separata da un indice Begin e un Index End

Vedi riferimento per Array.prototype.slice () . Non è possibile rimuovere un elemento specifico da questa opzione. È possibile prendere solo la sezione dell'array esistente e ottenere una parte continua dell'array. È come tagliare l'array dagli indici specificati. L'array originale non viene interessato.

const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];

console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]

console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]

console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]

3) SPLICE () - Cambia il contenuto dell'array rimuovendo o sostituendo gli elementi in indici specifici.

Vedi riferimento per Array.prototype.splice () . Il metodo splice () cambia il contenuto di un array rimuovendo o sostituendo elementi esistenti e / o aggiungendo nuovi elementi in atto. Restituisce l'array aggiornato. L'array originale viene aggiornato.

const months = ['Jan', 'March', 'April', 'June'];
months.splice(1, 0, 'Feb');
// inserts at index 1
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "June"]

months.splice(4, 1, 'May');
// replaces 1 element at index 4
console.log(months);
// expected output: Array ["Jan", "Feb", "March", "April", "May"]

0

Puoi anche farlo con riduci:

let arr = [1, 2, 3]

arr.reduce((xs, x, index) => {
        if (index == 0) {
            return xs
        } else {
            return xs.concat(x)
        }
    }, Array())

// Or if you like a oneliner
arr.reduce((xs, x, index) => index == 0 ? xs : xs.concat(x), Array())
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.