Ich habe ein JavaScript-Array dataArray
, die ich in ein neues Array newArray
schieben möchte. Nur will ich nicht, dass newArray[0]
ein dataArray
ist. Ich möchte alle Elemente in das neue Array schieben:
var newArray = [];
newArray.pushValues(dataArray1);
newArray.pushValues(dataArray2);
// ...
oder noch besser:
var newArray = new Array (
dataArray1.values(),
dataArray2.values(),
// ... where values() (or something equivalent) would push the individual values into the array, rather than the array itself
);
Das neue Array enthält nun also alle Werte der einzelnen Daten-Arrays. Gibt es eine Kurzschrift wie pushValues
, so dass ich nicht über jedes einzelne dataArray
iterieren muss, indem ich die Elemente eines nach dem anderen hinzufüge?
Verwenden Sie die Funktion concat, etwa so:
var arrayA = [1, 2];
var arrayB = [3, 4];
var newArray = arrayA.concat(arrayB);
Der Wert von newArray
wird [1, 2, 3, 4]
sein (arrayA
und arrayB
bleiben unverändert; concat
erstellt ein neues Array für das Ergebnis und gibt es zurück).
Sofern Ihre Arrays nicht sehr groß sind (siehe unten), können Sie die Methode push()
des Arrays verwenden, an das Sie Werte anhängen möchten. Die Methode push()
kann mehrere Parameter annehmen, so dass Sie die Methode apply()
verwenden können, um das Array mit den zu verschiebenden Werten als eine Liste von Funktionsparametern zu übergeben. Dies hat gegenüber der Verwendung von concat()
den Vorteil, dass Elemente dem Array an Ort und Stelle hinzugefügt werden, anstatt ein neues Array zu erstellen.
Es scheint jedoch, dass bei großen Arrays (in der Größenordnung von 100.000 Elementen oder mehr) dieser Trick fehlschlagen kann. Für solche Arrays ist die Verwendung einer Schleife ein besserer Ansatz. Siehe https://stackoverflow.com/a/17368101/96100 für Details.
var newArray = [];
newArray.push.apply(newArray, dataArray1);
newArray.push.apply(newArray, dataArray2);
Vielleicht möchten Sie dies in eine Funktion verallgemeinern:
function pushArray(arr, arr2) {
arr.push.apply(arr, arr2);
}
... oder fügen Sie es dem Prototyp von Array
hinzu:
Array.prototype.pushArray = function(arr) {
this.push.apply(this, arr);
};
var newArray = [];
newArray.pushArray(dataArray1);
newArray.pushArray(dataArray2);
... oder die ursprüngliche push()
Methode emulieren, indem man mehrere Parameter zulässt, indem man die Tatsache nutzt, dass concat()
, wie push()
, mehrere Parameter zulässt:
Array.prototype.pushArray = function() {
this.push.apply(this, this.concat.apply([], arguments));
};
var newArray = [];
newArray.pushArray(dataArray1, dataArray2);
Hier ist eine schleifenbasierte Version des letzten Beispiels, geeignet für große Arrays und alle gängigen Browser, einschließlich IE <= 8:
Array.prototype.pushArray = function() {
var toPush = this.concat.apply([], arguments);
for (var i = 0, len = toPush.length; i < len; ++i) {
this.push(toPush[i]);
}
};
var a=new Array('a','b','c');
var b=new Array('d','e','f');
var d=new Array('x','y','z');
var c=a.concat(b,d)
Ist Ihr Problem damit gelöst?