Dies ist ein einfacher Artikel mit einigen Tipps zur Verwendung von JavaScript-Arrays. Wir werden verschiedene Methoden verwenden, um zwei JS-Arrays zu kombinieren/zusammenzuführen, und die Vor- und Nachteile jeder Methode diskutieren.
Betrachten wir zunächst die folgende Situation:
Aber was ist, wenn a 10.000 Elemente hat und b auch 10.000 Elemente? C wird 20.000 Elemente haben, sodass sich die Speichernutzung von a und b verdoppelt.
„Kein Problem!“, sagen Sie. Lassen Sie sie im Müll sammeln, setzen Sie A und B auf Null, das Problem ist gelöst!
a = b = null; // 'a' und 'b' werden recycelt
Haha. Bei kleinen Arrays mit nur wenigen Elementen ist dies kein Problem. Aber bei großen Arrays oder in Systemen mit begrenztem Speicher, die diesen Vorgang häufig wiederholen müssen, gibt es tatsächlich viel Raum für Verbesserungen.
Schleifeneinfügung
Okay, kopieren wir den Inhalt eines Arrays in ein anderes, indem wir Folgendes verwenden: Array#push(..)
Scheint einen besseren Speicherbedarf zu haben.
Aber was ist, wenn Array a kleiner ist? Aus Speicher- und Geschwindigkeitsgründen möchten Sie möglicherweise das kleinere a vor b setzen. Kein Problem, ersetzen Sie einfach push(..) durch unshift(..):
Allerdings ist die for-Schleife tatsächlich hässlich und schwer zu warten. Können wir es besser machen?
Dies ist unser erster Versuch mit Array#reduce:
Wie wäre es damit:
Maximale Array-Längenbeschränkung
Das erste große Problem besteht darin, dass sich die Speichernutzung verdoppelt hat (vorübergehend natürlich!) und was angehängt wird, ist im Grunde das Kopieren von Elementen über Funktionsaufrufe in den Stapel. Darüber hinaus gibt es bei verschiedenen JS-Engines Einschränkungen hinsichtlich der Länge der kopierten Daten.
Wenn das Array also eine Million Elemente hat, überschreiten Sie definitiv die Grenze des für push(...) oder unshift(...) zulässigen Aufrufstapels. Mit ein paar tausend Elementen wird es leider gut funktionieren, aber Sie müssen darauf achten, angemessene Längengrenzen nicht zu überschreiten.
Hinweis: Sie können splice(...) ausprobieren, was das gleiche Problem wie push(...) und unshift(...) hat.
Es gibt eine Möglichkeit, diese maximale Längenbeschränkung zu umgehen.