1464 Stimmen

Wie man ein bestehendes JavaScript-Array mit einem anderen Array erweitert, ohne ein neues Array zu erstellen

Es scheint keine Möglichkeit zu geben, ein bestehendes JavaScript-Array mit einem anderen Array zu erweitern, d.h. Pythons extend Methode.

Ich möchte Folgendes erreichen:

>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
>>> a
[1, 2, 3, 4, 5]

Ich weiß, es gibt eine a.concat(b) Methode, aber sie erstellt ein neues Array, anstatt einfach das erste zu erweitern. Ich hätte gerne einen Algorithmus, der effizient arbeitet, wenn a deutlich größer ist als b (d.h. eine, die nicht kopiert a ).

<em><strong>Nota: </strong>Dies ist <strong>nicht ein Duplikat von <a href="https://stackoverflow.com/questions/351409/appending-to-array">Wie kann man etwas an ein Array anhängen? </a></strong>-- Ziel ist es hier, den gesamten Inhalt eines Arrays dem anderen hinzuzufügen, und zwar "an Ort und Stelle", d.h. ohne alle Elemente des erweiterten Arrays zu kopieren.</em>

10 Stimmen

Aus @Zahnbürste's Kommentar zu einer Antwort: a.push(...b) . Das Konzept ähnelt dem der ersten Antwort, wurde aber für ES6 aktualisiert.

0 Stimmen

>>> a.push(...b)

-2voto

Die Antwort ist ganz einfach.

>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
(The following code will combine the two arrays.)

a = a.concat(b);

>>> a
[1, 2, 3, 4, 5]

Concat funktioniert ganz ähnlich wie die JavaScript-Zeichenkettenverkettung. Es gibt eine Kombination der Parameter zurück, die Sie in die Concat-Funktion am Ende des Arrays eingeben, mit dem Sie die Funktion aufrufen. Der springende Punkt ist, dass Sie den zurückgegebenen Wert einer Variablen zuweisen müssen, sonst geht er verloren. Also zum Beispiel

a.concat(b);  <--- This does absolutely nothing since it is just returning the combined arrays, but it doesn't do anything with it.

-2voto

Felix Punkte 1344

Eine andere Möglichkeit, wenn Sie lodash installiert haben:

 import { merge } from 'lodash';

 var arr1 = merge(arr1, arr2);

-3voto

Mahdi Pedram Punkte 631

Utilisez Array.extend 代わりに Array.push für > 150.000 Datensätze.

if (!Array.prototype.extend) {
  Array.prototype.extend = function(arr) {
    if (!Array.isArray(arr)) {
      return this;
    }

    for (let record of arr) {
      this.push(record);
    }

    return this;
  };
}

-3voto

Nancy Brown Punkte 182

Sie können dies tun, indem Sie dem Array einfach neue Elemente mit Hilfe der push() Methode.

let colors = ["Red", "Blue", "Orange"];
console.log('Array before push: ' + colors);
// append new value to the array
colors.push("Green");
console.log('Array after push : ' + colors);

Eine weitere Methode zum Anhängen eines Elements an den Anfang eines Arrays ist die Funktion unshift(), die die neue Länge addiert und zurückgibt. Sie akzeptiert mehrere Argumente, fügt die Indizes der vorhandenen Elemente hinzu und gibt schließlich die neue Länge eines Arrays zurück:

let colors = ["Red", "Blue", "Orange"];
console.log('Array before unshift: ' + colors);
// append new value to the array
colors.unshift("Black", "Green");
console.log('Array after unshift : ' + colors);

Es gibt auch andere Methoden. Du kannst sie ausprobieren aquí .

-9voto

elPastor Punkte 7360

Super einfach, zählt nicht auf Spread-Operatoren oder gelten, wenn das ein Problem ist.

b.map(x => a.push(x));

Nach dem Ausführen einiger Performance-Tests auf diese, es ist furchtbar langsam, aber beantwortet die Frage in Bezug auf nicht ein neues Array erstellen. Concat ist deutlich schneller, sogar jQuery's $.merge() hoppelt es.

https://jsperf.com/merge-arrays19b/1

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