Wie lege ich ein Array in JavaScript leer?
Gibt es eine Möglichkeit, ein array leer, und wenn ja, evtl. mit .remove()
?
Beispielsweise
A = [1,2,3,4];
Wie kann ich die leeren?
Kommentar zu dem Problem
hier ein benchmark mit verschiedenen Möglichkeiten: jsben.ch/#/7QyI1
InformationsquelleAutor der Frage amir | 2009-08-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Möglichkeiten zum deaktivieren Sie ein vorhandenes array
A
:Methode 1
(das war meine ursprüngliche Antwort auf die Frage)
Dieser code setzt die variable
A
um ein neues leeres array. Dies ist ideal, wenn Sie nicht haben, Verweise auf das original-arrayA
anderswo wegen dieses tatsächlich schafft ein Marke neues (leeres) array. Sie sollten vorsichtig sein mit dieser Methode, weil, wenn Sie referenziert das array aus einer anderen Variablen oder Eigenschaft, das original-array unverändert bleibt. Verwenden Sie diese Funktion nur, wenn Sie nur Verweis auf die array von seiner ursprünglichen variableA
.Dies ist auch die Schnellste Lösung.
Dieses code-Beispiel zeigt das Problem können Sie begegnen, wenn Sie diese Methode:
Methode 2 (wie vorgeschlagen von Matthäus Crumley)
Hiermit löschen Sie den vorhandenen array, indem seine Länge auf 0. Einige haben argumentiert, dass dies funktioniert möglicherweise nicht in allen Implementierungen von JavaScript, aber es stellt sich heraus, dass dies nicht der Fall ist. Es funktioniert auch bei der Verwendung von "strict-Modus", in ECMAScript 5, da die length-Eigenschaft eines Arrays ist eine lese - /schreib-Eigenschaft.
Methode 3 (wie vorgeschlagen von Anthony)
Mit
.splice()
perfekt funktionieren wird, aber da die.splice()
Funktion gibt ein array mit allen Elemente entfernt, es wird tatsächlich bringen Sie eine Kopie des ursprünglichen Arrays. Benchmarks legen nahe, dass dies hat keine Auswirkung auf die Leistung zu löschen.Methode 4 (wie vorgeschlagen von tanguy_k)
Diese Lösung ist nicht sehr prägnant, und es ist auch die langsamste Lösung, im Gegensatz zu früheren benchmarks verwiesen, die in der ursprünglichen Antwort.
Leistung
Alle Methoden des clearing eine vorhandenen array, Methoden 2 und 3 sind sehr ähnlich in der Leistung und sind sehr viel schneller als mit Methode 4. Sehen Sie diese benchmark.
Wie bereits von Diadistis in Ihrer Antwort unten die original-benchmarks, die verwendet wurden, um zu bestimmen, die Leistung der vier oben beschriebenen Methoden fehlerhaft waren. Der ursprüngliche benchmark wiederverwendet das array gelöscht, so dass die zweite iteration war die Lichtung ein array, das war schon leer.
Den folgenden benchmark behebt dieses Manko: http://jsben.ch/#/hyj65. Es zeigt deutlich, dass die Methoden #2 (Eigenschaft length) und #3 (splice) sind die schnellsten (nicht-zählen-Methode #1 nicht ändern, das ursprüngliche array).
War dies ein heißes Thema und die Ursache von viel Streit. Es gibt tatsächlich viele richtige Antworten und weil diese Antwort markiert wurde als die akzeptierte Antwort für eine sehr lange Zeit, ich werde auch alle Methoden hier. Wenn Sie Stimmen für diese Antwort, bitte upvote die anderen Antworten, habe ich verwiesen.
InformationsquelleAutor der Antwort Philippe Leybaert
Wenn Sie brauchen, um die original-array, weil du noch andere Referenzen, die aktualisiert werden sollten, können Sie es löschen, ohne das erstellen eines neuen array durch festlegen der Länge null:
InformationsquelleAutor der Antwort Matthew Crumley
Hier die Schnellste Umsetzung arbeiten, während halten, die das gleiche array ("veränderlich"):FYI Anzeigen definiert
clear()
so würde es logisch erscheinen, habenclear()
für Array zu.Oder als Underscore.js mixin:
Oder eine einfache Funktion:
Typoskript version:
Zur info es kann nicht vereinfacht werden, um
while (array.pop())
: der Test schlägt fehl.Und die tests, die mit ihm geht:
Hier die aktualisierte jsPerf:
http://jsperf.com/array-destroy/32http://jsperf.com/array-destroy/152InformationsquelleAutor der Antwort tanguy_k
Eine weitere cross-browser-freundlich und mehr optimale Lösung zu verwenden, die
splice
Methode, um leere den Inhalt des Arrays Ein, wie unten:A.splice(0, A.length);
InformationsquelleAutor der Antwort Anthony
Leistungstest:
http://jsperf.com/array-clear-methods/3
InformationsquelleAutor der Antwort kenshou.html
Den Antworten, die haben nicht weniger, 2739 upvotes jetzt sind irreführend und falsch.
Die Frage ist: "Wie wollen Sie leeren Sie Ihre vorhandenen Arrays?" E. g. für
A = [1,2,3,4]
.Sagen "
A = []
ist die Antwort" ist ignorant und absolut falsch.[] == []
ist false.Dies ist, weil diese zwei arrays werden zwei separate, individuelle Objekte, die mit Ihrem eigenen zwei Identitäten, die Ihren eigenen Platz in der digitalen Welt, jeder auf seine eigene.
Sagen wir, Ihre Mutter bittet Sie, den Papierkorb zu leeren kann.
A = [1,2,3,4]; A = [];
Entleerung eines array-Objekts ist die einfachste Sache überhaupt:
Diese Weise können die unter "A" ist nicht nur leer, sondern auch so sauber wie neu!
Darüber hinaus sind Sie nicht verpflichtet, entfernen Sie den Papierkorb von hand, bis die Dose leer ist! Sie wurden gebeten, zu leeren die vorhandene, komplett in einem Spielzug nicht zu Holen, den Müll, bis die Dose leer wird, wie in:
Noch, legen Sie Ihre linke hand an der Unterseite des trash, halten Sie ihn mit der rechten Seite an der Oberseite zu können, ziehen Sie seinen Inhalt heraus, wie in:
Nein, Sie wurden gebeten, zu leeren:
Dies ist der einzige code, der korrekt leert den Inhalt eines bestimmten JavaScript-array.
InformationsquelleAutor der Antwort Bekim Bacaj
Können Sie fügen Sie diese, um Ihre JavaScript-Datei zu ermöglichen, Ihren arrays eine "Freigabe":
Dann können Sie es verwenden, wie diese:
Oder wenn Sie wollen sicher sein, Sie nicht zu zerstören, etwas:
Viele Leute denken, Sie sollten nicht ändern, native Objekte (wie Array), und ich bin geneigt zu vereinbaren. Bitte seien Sie vorsichtig bei der Entscheidung, wie Sie damit umgehen können.
InformationsquelleAutor der Antwort leech
Und nennen es:
array.clear();
InformationsquelleAutor der Antwort Bendegúz
Falls Sie interessiert sind, in die Speicher-Zuordnung, die können Sie vergleichen, jeder Ansatz mit so etwas wie dieses jsfiddle in Verbindung mit den chrome dev tools " der Registerkarte timeline. Möchten Sie den Papierkorb-Symbol am unteren Rand eine Kraft, die eine garbage collection nach dem "clearing" der array. Dies sollte Ihnen eine endgültige Antwort für den browser Ihrer Wahl. Viele Antworten hier sind alt, und ich würde nicht auf Sie verlassen, sondern testen, wie in @tanguy_k die Antwort von oben.
(für ein intro auf der oben genannten Registerkarte, die Sie heraus überprüfen können hier)
Stackoverflow zwingt mich dazu kopieren Sie die jsfiddle also hier ist es:
Und Sie sollten zur Kenntnis nehmen, dass es möglicherweise abhängen, die den Typ der array-Elemente, die als javascript-strings verwaltet anders als andere primitive Typen, nicht zu erwähnen, arrays von Objekten. Der Typ kann beeinflussen, was passiert.
InformationsquelleAutor der Antwort matanster
Es gibt viel Verwirrung und Fehlinformationen in Bezug auf das während;pop/shift performance sowohl in Antworten und Kommentare. Die while - /pop-Lösung hat (wie erwartet) die schlechteste Leistung. Was tatsächlich geschieht, ist, dass das setup wird nur einmal für jede Probe, läuft das snippet in einer Schleife. eg:
Habe ich einen neuen test, der richtig arbeitet :
http://jsperf.com/empty-javascript-array-redux
Warnung: auch in dieser version des Tests Sie können nicht wirklich sehen, der wirkliche Unterschied, weil das Klonen der array nimmt den größten Teil der test-Zeit. Es zeigt immer noch, dass
splice
ist der Schnellste Weg, um deaktivieren Sie das array (nicht unter[]
in Betracht, weil es ist zwar das Schnellste ist es nicht tatsächlich löschen des vorhandenen array).InformationsquelleAutor der Antwort Diadistis
A.splice(0);
Habe ich nur dieses auf einige code an dem ich arbeite. Es machte den array.
InformationsquelleAutor der Antwort David Campbell
Wenn Sie
Dann bei der Zuweisung einer neuen array-Referenz a, Referenz, wenn in einem bereits zugewiesenen jede andere variable, dann wird es nicht leer ist, das array zu und damit garbage collector erfasst nicht, dass der Speicher.
Für ex.
oder
Wenn wir angeben
a.length
sind wir nur zurücksetzen Grenzen des Arrays und Speicher für rest-array-Elemente werden verbunden durch den garbage-collector.Statt dieser beiden Lösungen besser sind.
und
Als pro Vorherige Antwort durch kenshou.html, zweite Methode schneller ist.
InformationsquelleAutor der Antwort Laxmikant Dange
Verwenden eine modifizierte version von Jan's ersten Vorschlag:
InformationsquelleAutor der Antwort cssimsek
Wenn Sie die Konstanten verwenden, dann haben Sie keine Wahl:
Können Sie nicht reasign:
Können Sie nur abschneiden:
InformationsquelleAutor der Antwort Damjan Pavlica
Können Sie leicht eine Funktion erstellen, um das für Sie tun, ändern Sie die Länge oder sogar fügen Sie es zu native Array - als die remove () - Funktion für die Wiederverwendung.
Stellen Sie sich vor Sie haben dieses array:
OK, nur führen Sie einfach diese:
und das Ergebnis ist:
einfache Möglichkeit, ein array leer...
Auch mithilfe der Schleife, das ist nicht notwendig, sondern nur ein weiterer Weg, dies zu tun:
Gibt es auch knifflige Art und Weise, die Sie denken können, zum Beispiel so etwas wie dieses:
Also, wenn arr hat 5 Elemente, es wird splice 5 Positionen von 0, was bedeutet, dass nichts bleiben wird, in dem array.
Auch andere Möglichkeiten wie weisen Sie einfach die array-Beispiel:
Wenn man sich die Array-Funktionen, es gibt viele andere Möglichkeiten, dies zu tun, aber die meisten empfehlen könne man die änderung der Länge.
Wie gesagt in den ersten Platz, Sie können auch Prototypen remove (), wie es die Antwort auf Ihre Frage. Sie können wählen Sie einfach eine der oben genannten Methoden und Prototypen, die es zu Array-Objekt in JavaScript, so etwas wie:
und rufen Sie einfach an, wie diese zu leeren Arrays, die Sie in Ihrem javascript-Anwendung:
InformationsquelleAutor der Antwort Alireza
Ich bin überrascht, niemand hat vorgeschlagen, dieses noch:
Dadurch ergibt sich ein array in einen ganz anderen Zustand aus eine der anderen Lösungen. In einem gewissen Sinn, das array hat 'entleert':
Produzieren Sie ein entsprechendes array mit
[,,,,]
oderArray(4)
InformationsquelleAutor der Antwort Cauterite
Leer einer Aktuellen Speicherbereich eines Arrays verwenden:
'myArray.length = 0'
oder'myArray.pop() UN-till its length is 0'
length
: Sie können die Eigenschaft Länge abschneiden, ein array zu jeder Zeit. Beim erweitern eines Arrays, indem Sie seine Eigenschaft length, die die Anzahl der tatsächlichen Elemente erhöht.pop()
: Die pop-Methode entfernt die letzten element aus einem array und gibt liefert den Wert entfernt.shift()
: Die shift-Methode entfernt das element an der zeroeth index und Verschiebungen der Werte bei aufeinander folgenden Indizes nach unten, dann gibt der Wert entfernt werden.Beispiel:
new Array() | []
Erstellen Sie ein Array mit den neuen Speicherbereich durch VerwendungArray constructor
oderarray literal
.slice()
: Durch die Verwendung der slice-Funktion erhalten wir eine flache Kopie von Elementen des ursprünglichen Arrays, mit neuen Speicher-Adresse, So dass jede änderung am cloneArr wird nicht auf einer tatsächlichen|original-array.InformationsquelleAutor der Antwort Yash
Unten verwenden, wenn Sie brauchen, um leere Eckige 2+ FormArray.
InformationsquelleAutor der Antwort Manish Jain