Wie entferne ich ein Element aus einem Array in JavaScript?

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

Entfernen Sie das erste Element

Ich möchte das erste Element des Arrays entfernen, damit es:

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

Entfernen Sie das zweite Element

Um diese Frage zu erweitern, was ist, wenn ich das zweite Element des Arrays entfernen möchte, damit es wird:

var arr = [1,3,5,6];
user198729
quelle
1
slice(start, end)nicht 'how_many_to_remove'
Seanjacob
2
@Ped arr.unshift () entfernt nicht, aber "Fügt ein oder mehrere Elemente am Anfang eines Arrays hinzu"
psycho brm
@ Seanjacob ist es splicenicht, slicedenke ich.
Animesh Singh

Antworten:

346

Verwenden Sie für eine flexiblere Lösung die splice()Funktion. Sie können jedes Element in einem Array basierend auf dem Indexwert entfernen:

var indexToRemove = 0;
var numberToRemove = 1;

arr.splice(indexToRemove, numberToRemove);
Gabriel McAdams
quelle
12
Und die folgende Frage: arr.splice(1,1)für das zweite Element.
Slebetman
1
Ich bevorzuge splice()es, shift()weil es flexibler ist. Möglicherweise möchte ich in Zukunft etwas anderes tun, und nicht immer möchte ich nur ein Element oder sogar das erste Element entfernen.
Gabriel McAdams
14
Wenn Sie von Google hierher kommen: Gabriel bevorzugt diese Antwort, aber Sie sollten sich bewusst sein, dass es auch eine Verschiebung gibt (), siehe Josephs Antwort.
SHernandez
668

shift()ist ideal für Ihre Situation. shift()Entfernt das erste Element aus einem Array und gibt dieses Element zurück. Diese Methode ändert die Länge des Arrays.

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

array.shift(); // 1

array // [2, 3, 4, 5]
JP Silvashy
quelle
Dies funktioniert, entfernt jedoch nur das erste Element im Array.
Gabriel McAdams
53
@ Gabriel: War das nicht genau die Frage? Ich bevorzuge es shift(), splice(..., ...)da es viel expliziter und direkter ist.
Bruno Reis
6
Korrektur: Es gibt das erste Element zurück, kein neues Array abzüglich des ersten Elements, gemäß dem von Ihnen angegebenen Link :)
DanH
Während das Codebeispiel korrekt ist, ist die Beschreibung irreführend: (a) Wie @DanH hervorhebt, wird das erste Element zurückgegeben , und (b) die Tatsache, dass das Eingabearray geändert wird, wird nicht klargestellt. Daher ist Peds Antwort überlegen.
mklement0
2
shiftist schneller, es sei denn, Sie spleißen große Listen jsperf.com/splice-vs-shift3 und jsperf.com/splice-vs-shift2
kcathode
61

Die Array.prototype.shiftMethode entfernt das erste Element aus einem Array und gibt es zurück. Es ändert das ursprüngliche Array.

var a = [1,2,3]
// [1,2,3]
a.shift()
// 1
a
//[2,3]
p3drosola
quelle
4
Eine große Verbesserung gegenüber Joseph Silvashys Antwort - keine Inkonsistenzen zwischen Beschreibung und Code.
mklement0
48
arr.slice(begin[,end])

ist zerstörungsfrei, Splice und Shift ändern Ihr ursprüngliches Array

Kiuma
quelle
3
Ja für nicht mutieren. Dies sollte sichtbarer sein.
Benutzer
16

Schrieb einen kleinen Artikel über das Einfügen und Löschen von Elementen an beliebigen Positionen in Javascript-Arrays.

Hier ist der kleine Ausschnitt, mit dem Sie ein Element aus einer beliebigen Position entfernen können. Dadurch wird die Array-Klasse in Javascript erweitert und die Methode remove (index) hinzugefügt.

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

Um das erste Element in Ihrem Beispiel zu entfernen, rufen Sie arr.remove () auf:

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

Um das zweite Element zu entfernen,

arr.remove(1);

Hier ist ein winziger Artikel mit Einfüge- und Löschmethoden für die Array-Klasse.

Im Wesentlichen unterscheidet sich dies nicht von den anderen Antworten, die Splice verwenden, aber der Name spliceist nicht intuitiv. Wenn Sie diesen Aufruf in Ihrer gesamten Anwendung haben, wird der Code nur schwerer lesbar.

Anurag
quelle
14

Vielleicht so etwas:

arr=arr.slice(1);
ThatGuyYouKnow
quelle
7

Andere Antworten sind großartig. Ich wollte nur eine alternative Lösung mit der ES6Array-Funktion hinzufügen : filter.

filter() Erstellt ein neues Array mit Elementen, die unter ein bestimmtes Kriterium fallen, aus einem vorhandenen Array.

So können Sie problemlos Elemente entfernen, die die Kriterien nicht erfüllen. Diese Funktion bietet den Vorteil, dass Sie sie für komplexe Arrays verwenden können, nicht nur für Zeichenfolgen und Zahlen.

Einige Beispiele :

Erstes Element entfernen :

// 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]

Zweites Element entfernen :

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

Ungerades Element entfernen :

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

Nicht auf Lager befindliche Artikel entfernen

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

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

Martin Choraine
quelle
2

Sie können die ES6-Destructuring Assignment-Funktion mit einem Restoperator verwenden. Ein Komma gibt an, wo Sie das Element entfernen möchten, und der Operator rest (... arr), um die verbleibenden Elemente des Arrays anzuzeigen.

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]

Brendan
quelle
1

Array.splice()hat die interessante Eigenschaft, dass man damit das erste Element nicht entfernen kann. Wir müssen also darauf zurückgreifen

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

    if ( index === -1 ) {
        return array.shift();
    } else {
        return array.splice( index, 1 );
    }
}
Gabriel Schulhof
quelle
3
Array.splice (0,1) entfernt das erste Element. Nach jeder anderen Antwort hier und nach developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… . Warum sollte jemand -1 übergeben, um das erste Element zu entfernen? Würden sie nicht 0 überschreiten?
Stein
@skypecakes Ich kann nicht über die Gültigkeit von Spleiß auf dem 0. Index sprechen, aber hier wird der Index vor dieser Prüfung dekrementiert, so dass es 0 gewesen wäre, wenn er übergeben wurde.
Jake T.
Ja, es kann definitiv das erste Element entfernen. Ich habe es hier getestet: jsfiddle.net/sijpkes/d87rcLob/2
sijpkes
1

Typoskript-Lösung, die das ursprüngliche Array nicht mutiert

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

Es gibt mehrere Möglichkeiten, ein Element aus einem Array zu entfernen. Lassen Sie mich unten auf die am häufigsten verwendeten Optionen hinweisen. Ich schreibe diese Antwort, weil ich aus all diesen Optionen keinen richtigen Grund für die Verwendung finden konnte. Die Antwort auf die Frage lautet Option 3 ( Splice () ).

1) SHIFT () - Entfernen Sie das erste Element aus dem ursprünglichen Array und geben Sie das erste Element zurück

Siehe Referenz für Array.prototype.shift () . Verwenden Sie diese Option nur, wenn Sie das erste Element entfernen möchten, und nur, wenn Sie mit dem Ändern des ursprünglichen Arrays einverstanden sind.

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 () - Gibt eine Kopie des Arrays zurück, die durch einen Anfangsindex und einen Endindex getrennt ist

Siehe Referenz für Array.prototype.slice () . Sie können ein bestimmtes Element nicht aus dieser Option entfernen. Sie können nur das vorhandene Array in Scheiben schneiden und einen kontinuierlichen Teil des Arrays abrufen. Es ist so, als würde man das Array aus den von Ihnen angegebenen Indizes ausschneiden. Das ursprüngliche Array wird nicht beeinflusst.

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 () - Ändern Sie den Inhalt des Arrays, indem Sie Elemente an bestimmten Indizes entfernen oder ersetzen.

Siehe Referenz für Array.prototype.splice () . Die splice () -Methode ändert den Inhalt eines Arrays, indem vorhandene Elemente entfernt oder ersetzt und / oder neue Elemente hinzugefügt werden. Gibt ein aktualisiertes Array zurück. Das ursprüngliche Array wird aktualisiert.

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"]
Keet Sugathadasa
quelle
0

Sie können dies auch mit reduzieren tun:

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())
ICH BIN DER BESTE
quelle