2014-02-16 12 views
13

Gibt es einen kurzen Weg/Best Practice, um 3 Arrays in 1 Array zu fassen?concat 3 Arrays in 1 Array in Javascript/Unterstrich

var arr = [], 
    arr1 = [ 1 , 2 , 3 ], 
    arr2 = [ 4 , 5 , 6 ], 
    arr3 = [ 7 , 8 , 9 ]; 
arr = arr.concat(arr1); 
arr = arr.concat(arr2); 
arr = arr.concat(arr3); 
+1

arr.concat (arr1, arr2, arr3), [w3schools] (http://www.w3schools.com/jsref/jsref_concat_array.asp) – arty

+0

Sie können auch 'arr1 + arr2 + arr3' verwenden, um' concat' –

+1

@MuhammadHaseebKhan: Nein, das können Sie nicht in JavaScript. Dies konvertiert die drei Arrays in Strings (Aufruf von .join (',') auf jedem Array) und verketten die drei Strings. Aber Sie können zum Beispiel den Plus-Operator in PHP verwenden, um Arrays zu verketten. –

Antwort

27

Die kürzeste (und schnellsten) Lösung sind arr = arr1.concat(arr2, arr3);

Alternativen:

  • arr = arr.concat(arr1, arr2, arr3)
  • arr = Array.prototype.concat(arr1, arr2, arr3)
  • arr = [].concat(arr1, arr2, arr3)
4

Es gibt nicht viel zu tun. Sie können es vereinfachen:

arr = arr.concat(arr1).concat(arr2).concat(arr3) 

Oder @Radko Dinev Antwort für eine noch einfachere (und besser) Art und Weise sehen, es zu tun.

Wenn Sie ein Array von Arrays (mit einer variablen Anzahl von Arrays) haben, können Sie versuchen:

var m = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]; 
var new_m = []; 
new_m.concat.apply(new_m, m); 
3
_.reduce(arrays, function(result, arr) { 
    return result.concat(arr) 
}, []) 
+1

Diese Lösung funktioniert nur, wenn OP Unterstriche oder Lodash-Bibliotheken verwendet. Javascript hat eine native ['Array.reduce'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce) Methode für diesen Zweck. –

+0

Ich benutze lodash, um map/reduce usw. über Wörterbücher zu machen, also verwende ich es auch, um diese Operationen über Arrays durchzuführen. Aber ja, Sie könnten Array-Methoden verwenden, wenn Sie nicht Lodash verwenden möchten. – tldr

4

würde ich _.flatten verwenden.

var arr = [[1,2,3], [4,5,6], [7,8,9]]; 
var result = _.flatten(arr) // [1,2,3,4,5,6,7,8,9] 
2

Spread syntax macht Verkettung einfach:

arr = [...arr1, ...arr2, ...arr3] 

Sie auch Nicht-Array-Elemente inline können sein:

arr = [...arr1, 42, ...arr2, ...arr3] 
1

Eine flexiblere Art und Weise:

var arraysToConcat = [arr1, arr2, arr3]; 
var arr = Array.prototype.concat.apply([], arraysToConcat);