2014-02-16 38 views
13

将3个数组连接成1个数组有没有简短的方法/最佳做法?在javascript /下划线中将3个数组连接到1个数组中

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

你也可以用'arr1 + arr2 + arr3'来'concat' –

+1

@MuhammadHaseebKhan:不,你不能在JavaScript中做到这一点。这会将三个数组转换为字符串(在每个数组上调用.join(','))并连接这三个字符串。但是,例如,您可以在PHP中使用加号运算符来连接数组。 –

回答

27

最短(和最快)的解决方案是arr = arr1.concat(arr2, arr3);

备选方案:

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

没有太多的事情要做。你可以简化它:

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

或者请参阅@Radko Dinev答案,以更简单(更好)的方式来做到这一点。

如果数组的数组(与阵列的变量数),则可以尝试:

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

如果OP使用下划线或lodash库,这个解决方案只会起作用。为此,Javascript有一个本地['Array.reduce'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce)方法。 –

+0

我最终使用lodash进行map/reduce等操作,所以我用它在数组上进行这些操作。但是,如果你不想使用lodash,你可以使用Array方法。 – tldr

4

我会用_.flatten

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使级联简单:

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

你甚至可以包括非数组项在线:

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

更灵活的方式:

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