在JavaScript中连接N个数组的最有效方法是什么?
在JavaScript
连接N个对象数组的最有效方法是什么?
数组是可变的,结果可以存储在其中一个input数组中。
如果连接两个以上的数组, concat()
是方便和可能的性能。
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];
对于只连接两个数组的情况, push
接受多个由添加到数组的元素组成的参数的事实可以用来将一个数组中的元素添加到另一个数组的末尾而不产生新的数组。 使用slice()
也可以用来代替concat()
但是这样做似乎没有性能优势 。
var a = [1, 2], b = ["x", "y"]; a.push.apply(a, b); console.log(a); // [1, 2, "x", "y"];
在ECMAScript 2015和更高版本中,这可以进一步降低
a.push(...b)
但是,对于大型数组(大约100,000个成员或更多),使用apply()
或ECMAScript 2015展开式运算符传递元素数组的方法可能会失败。 对于这样的数组,使用循环是一个更好的方法。 有关详细信息,请参阅https://stackoverflow.com/a/17368101/96100 。
[].concat.apply([], [array1, array2, ...])
编辑 :效率certificate: http : //jsperf.com/multi-array-concat/7
concat()
方法用于连接两个或多个数组。 它不会更改现有数组,它只会返回已连接数组的副本。
array1 = array1.concat(array2, array3, array4, ..., arrayN);
使用Array.prototype.concat.apply处理多个数组的连接:
var resultArray = Array.prototype.concat.apply([], arrayOfArraysToConcat);
例:
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]
如果你正在通过map / filter / sort等来输出结果,而你想连接数组,你可以使用reduce
let sorted_nums = ['1,3', '4,2'] .map(item => item.split(',')) // [['1', '3'], ['4', '2']] .reduce((a, b) => a.concat(b)) // ['1', '3', '4', '2'] .sort() // ['1', '2', '3', '4']
轻松使用concatfunction:
var a = [1,2,3]; var b = [2,3,4]; a = a.concat(b); >> [1,2,3,2,3,4]
对于那些使用ES2015(ES6)
您现在可以使用Spread语法来连接数组:
let arr1 = [0, 1, 2], arr2 = [3, 4, 5]; arr1 = [...arr1, ...arr2]; // or... arr1 = [...arr2, ...arr1];
您可以使用jsperf.com网站来比较性能。 这里是concat的链接。
新增比较:
var c = a.concat(b);
和:
var c = []; for (i = 0; i < a.length; i++) { c.push(a[i]); } for (j = 0; j < b.length; j++) { c.push(b[j]); }
第二个是铬慢了近10倍。
这是一个你可以连接多个数组的函数
function concatNarrays(args) { args = Array.prototype.slice.call(arguments); var newArr = args.reduce( function(prev, next) { return prev.concat(next) ; }); return newArr; }
示例 –
console.log(concatNarrays([1, 2, 3], [5, 2, 1, 4], [2,8,9]));
会输出
[1,2,3,5,2,1,4,2,8,9]
尝试这个:
i=new Array("aaaa", "bbbb"); j=new Array("cccc", "dddd"); i=i.concat(j);
其中'n'是一些数组,也许是一个数组数组。 。 。
var answer = _.reduce(n,function(a,b){return a.concat(b)})
如果只有两个数组要连接,并且实际上需要追加一个数组而不是创build一个新的数组,那么push或者loop就是要走的路。
基准: https : //jsperf.com/concat-small-arrays-vs-push-vs-loop/
对于多个arrays和ES6的arrays,请使用
Array.prototype.concat(...arr);
例如:
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 ]