2192 Stimmen

Wie kann ich ein Array in JavaScript leeren?

Gibt es eine Möglichkeit, ein Array zu leeren und wenn ja, möglicherweise mit .remove() ?

Zum Beispiel,

A = [1,2,3,4];

Wie kann ich das leeren?

5647voto

Philippe Leybaert Punkte 161931

Wege zum Löschen eines bestehenden Arrays A :

Methode 1

(dies war meine ursprüngliche Antwort auf die Frage)

A = [];

Dieser Code setzt die Variable A in ein neues leeres Array. Dies ist perfekt, wenn Sie nicht über Verweise auf das ursprüngliche Array A irgendwo anders, denn dadurch wird ein völlig neues (leeres) Array erstellt. Sie sollten mit dieser Methode vorsichtig sein, denn wenn Sie dieses Array über eine andere Variable oder Eigenschaft referenziert haben, bleibt das ursprüngliche Array unverändert. Verwenden Sie diese Methode nur, wenn Sie das Array nur über seine ursprüngliche Variable referenzieren A .

Dies ist auch die schnellste Lösung.

Dieses Codebeispiel zeigt das Problem, das bei der Verwendung dieser Methode auftreten kann:

var arr1 = ['a','b','c','d','e','f'];
var arr2 = arr1;  // Reference arr1 by another variable 
arr1 = [];
console.log(arr2); // Output ['a','b','c','d','e','f']

Methode 2 (als vorgeschlagen por Matthew Crumley )

A.length = 0

Dadurch wird das vorhandene Array gelöscht, indem seine Länge auf 0 gesetzt wird. Einige haben argumentiert, dass dies nicht in allen Implementierungen von JavaScript funktionieren kann, aber es stellt sich heraus, dass dies nicht der Fall ist. Es funktioniert auch im "Strict Mode" von ECMAScript 5, da die Längeneigenschaft eines Arrays eine Lese-/Schreibeigenschaft ist.

Methode 3 (als vorgeschlagen por Anthony )

A.splice(0,A.length)

Verwendung von .splice() wird perfekt funktionieren, aber da die .splice() Funktion ein Array mit allen entfernten Elementen zurückgibt, gibt sie tatsächlich eine Kopie des ursprünglichen Arrays zurück. Benchmarks zeigen, dass dies keinerlei Auswirkungen auf die Leistung hat.

Methode 4 (als vorgeschlagen por tanguy_k )

while(A.length > 0) {
    A.pop();
}

Diese Lösung ist nicht sehr prägnant und auch die langsamste Lösung, im Gegensatz zu früheren Benchmarks, auf die in der ursprünglichen Antwort verwiesen wurde.

Leistung

Von allen Methoden zur Räumung eines vorhandene Anordnung Die Methoden 2 und 3 sind in ihrer Leistung sehr ähnlich und wesentlich schneller als Methode 4. Siehe dies Benchmark .

Wie von Diadistis in ihrem Antwort Im Folgenden werden die ursprünglichen Benchmarks, die zur Bestimmung der Leistung der vier oben beschriebenen Methoden verwendet wurden, als fehlerhaft bezeichnet. Der ursprüngliche Benchmark verwendete das geleerte Array wieder, so dass bei der zweiten Iteration ein Array geleert wurde, das bereits leer war.

Der folgende Benchmark behebt diese Schwachstelle: http://jsben.ch/#/hyj65 . Es zeigt sich deutlich, dass die Methoden Nr. 2 (Längeneigenschaft) und Nr. 3 (Splice) am schnellsten sind (abgesehen von Methode Nr. 1, die das ursprüngliche Array nicht verändert).


Dies war ein heißes Thema und Anlass für eine Menge Kontroversen. Es gibt tatsächlich viele richtige Antworten, und da diese Antwort seit langem als die akzeptierte Antwort gekennzeichnet ist, werde ich hier alle Methoden aufführen.

2736voto

Matthew Crumley Punkte 98564

Wenn Sie das ursprüngliche Array behalten müssen, weil Sie andere Verweise darauf haben, die ebenfalls aktualisiert werden sollen, können Sie es löschen, ohne ein neues Array zu erstellen, indem Sie seine Länge auf Null setzen:

A.length = 0;

319voto

tanguy_k Punkte 10110

Hier die schnellstmögliche Umsetzung während Beibehaltung der gleichen Anordnung ("veränderlich"):

function clearArray(array) {
  while (array.length) {
    array.pop();
  }
}

Zu Ihrer Information: Es kann nicht vereinfacht werden auf while (array.pop()) : Die Tests werden fehlschlagen.

ZU IHRER INFORMATION Karte y Satz definieren. clear() wäre es logisch gewesen, wenn man clear() para Array también.

TypeScript-Version:

function clearArray<T>(array: T[]) {
  while (array.length) {
    array.pop();
  }
}

Die entsprechenden Tests:

describe('clearArray()', () => {
  test('clear regular array', () => {
    const array = [1, 2, 3, 4, 5];
    clearArray(array);
    expect(array.length).toEqual(0);
    expect(array[0]).toEqual(undefined);
    expect(array[4]).toEqual(undefined);
  });

  test('clear array that contains undefined and null', () => {
    const array = [1, undefined, 3, null, 5];
    clearArray(array);
    expect(array.length).toEqual(0);
    expect(array[0]).toEqual(undefined);
    expect(array[4]).toEqual(undefined);
  });
});

Hier der aktualisierte jsPerf: http://jsperf.com/array-destroy/32 http://jsperf.com/array-destroy/152

jsPerf offline. Ähnlicher Benchmark: https://jsben.ch/hyj65

262voto

Anthony Punkte 2601

Eine browserübergreifend freundlichere und optimalere Lösung ist die Verwendung der splice Methode, um den Inhalt des Arrays A wie unten beschrieben zu leeren:

A.splice(0, A.length);

165voto

Bekim Bacaj Punkte 5223

Die Antworten, die inzwischen nicht weniger als 2739 Bewertungen erhalten haben, sind irreführend und falsch.

Die Frage ist: "Wie leeren Sie Ihr bestehendes Array?" Z.B. für A = [1,2,3,4] .

  1. Spruch " A = [] ist die Antwort" ist ignorant und absolut falsch. [] == [] es falsch .

    Der Grund dafür ist, dass es sich bei diesen beiden Feldern um zwei getrennte, individuelle Objekte mit zwei eigenen Identitäten handelt, die jeweils ihren eigenen Raum in der digitalen Welt einnehmen.


Angenommen, deine Mutter bittet dich, den Mülleimer zu leeren.

  • Man bringt keinen neuen ein, als ob man getan hätte, worum man gebeten wurde.
  • Stattdessen leeren Sie den Mülleimer.
  • Man ersetzt die gefüllte Dose nicht durch eine neue, leere Dose, und man nimmt nicht das Etikett "A" von der gefüllten Dose und klebt es auf die neue Dose, wie in A = [1,2,3,4]; A = [];

Ein Array-Objekt zu leeren ist die einfachste Sache der Welt:

A.length = 0;

Auf diese Weise ist die Dose unter "A" nicht nur leer, sondern auch so sauber wie neu!


  1. Außerdem müssen Sie den Müll nicht von Hand entfernen, bis die Tonne leer ist! Sie wurden aufgefordert, den vorhandenen Mülleimer in einem Zug vollständig zu entleeren und den Müll nicht aufzuheben, bis der Mülleimer leer ist, wie in:

    while(A.length > 0) {
        A.pop();
    }
  2. Auch nicht, die linke Hand unten in den Papierkorb zu legen und ihn mit der rechten oben zu halten, um den Inhalt herausziehen zu können, wie in:

    A.splice(0, A.length);

Nein, Sie wurden gebeten, sie zu leeren:

A.length = 0;

Dies ist der einzige Code, der den Inhalt eines gegebenen JavaScript-Arrays korrekt leert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X