Was ist der effizienteste Weg, um N Arrays von Objekten in JavaScript zu verketten?
Die Arrays sind veränderbar, und das Ergebnis kann in einem der Eingabe-Arrays gespeichert werden.
Was ist der effizienteste Weg, um N Arrays von Objekten in JavaScript zu verketten?
Die Arrays sind veränderbar, und das Ergebnis kann in einem der Eingabe-Arrays gespeichert werden.
Wenn Sie mehr als zwei Arrays verketten, concat()
ist die beste Lösung, wenn es um Komfort und Leistung geht.
var a = [1, 2], b = ["x", "y"], c = [true, false];
var d = a.concat(b, c);
console.log(d); // [1, 2, "x", "y", true, false];
Bei der Verkettung von nur zwei Arrays ist die Tatsache, dass push
mehrere Argumente akzeptiert, die aus Elementen bestehen, die dem Array hinzugefügt werden sollen, kann stattdessen verwendet werden, um Elemente aus einem Array an das Ende eines anderen hinzuzufügen, ohne ein neues Array zu erzeugen. Mit slice()
kann es auch anstelle von concat()
sondern Es scheint keinen Leistungsvorteil zu geben, wenn man dies tut. .
var a = [1, 2], b = ["x", "y"];
a.push.apply(a, b);
console.log(a); // [1, 2, "x", "y"];
In ECMAScript 2015 und später kann dies noch weiter reduziert werden auf
a.push(...b)
Es scheint jedoch, dass bei großen Arrays (in der Größenordnung von 100.000 Elementen oder mehr) die Technik, ein Array von Elementen an push
(entweder mit apply()
oder der ECMAScript 2015 Spread-Operator) kann fehlschlagen. Für solche Arrays ist die Verwendung einer Schleife ein besserer Ansatz. Siehe https://stackoverflow.com/a/17368101/96100 für Einzelheiten.
[].concat.apply([], [array1, array2, ...])
bearbeiten : Nachweis der Effizienz: http://jsperf.com/multi-array-concat/7
bearbeiten2 : Tim Supinie erwähnt in den Kommentaren, dass dies dazu führen kann, dass der Interpreter die Größe des Aufrufstapels überschreitet. Dies ist vielleicht abhängig von der js-Engine, aber ich habe auch "Maximum call stack size exceeded" zumindest auf Chrome bekommen. Testfall: [].concat.apply([], Array(300000).fill().map(_=>[1,2,3]))
. (Ich habe auch den gleichen Fehler mit der derzeit akzeptierten Antwort erhalten, so dass man solche Anwendungsfälle vorwegnimmt oder eine Bibliothek für andere baut, können spezielle Tests notwendig sein, egal welche Lösung Sie wählen).
Neue Antwort
Für Arrays mit mehreren Arrays und ES6, verwenden Sie
arr.flat();
Zum Beispiel:
const arr = [[1, 2, 3], [4, 5, 6], [7, 8 ,9]];
const newArr = arr.flat();
// output: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Dies funktioniert mit Node > 11 und modernen Browsern.
Alte Antwort
(ich lasse es hier, falls es für alte Node-Versionen benötigt wird):
Für Arrays mit mehreren Arrays und ES6, verwenden Sie
Array.prototype.concat(...arr);
Zum Beispiel:
const arr = [[1, 2, 3], [4, 5, 6], [7, 8 ,9]];
const newArr = Array.prototype.concat(...arr);
// output: [ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
Verwenden Sie Array.prototype.concat.apply, um die Verkettung mehrerer Arrays zu behandeln:
var resultArray = Array.prototype.concat.apply([], arrayOfArraysToConcat);
Ejemplo:
var a1 = [1, 2, 3],
a2 = [4, 5],
a3 = [6, 7, 8, 9];
Array.prototype.concat.apply([], [a1, a2, a3]); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
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.