连接 N 个数组的最有效方法是什么?
2022-08-29 23:51:37
在JavaScript中连接N个对象数组的最有效方法是什么?
数组是可变的,结果可以存储在其中一个输入数组中。
在JavaScript中连接N个对象数组的最有效方法是什么?
数组是可变的,结果可以存储在其中一个输入数组中。
如果要连接两个以上的数组,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 个成员或更多),将元素数组传递给(使用或 ECMAScript 2015 展开运算符)的技术似乎可能会失败。对于此类数组,使用循环是更好的方法。有关详细信息,请参阅 https://stackoverflow.com/a/17368101/96100。push
apply()
[].concat.apply([], [array1, array2, ...])
编辑:效率证明:http://jsperf.com/multi-array-concat/7
edit2:Tim Supinie在评论中提到,这可能会导致解释器超过调用堆栈大小。这可能取决于js引擎,但我至少在Chrome上也得到了“超出最大调用堆栈大小”。测试用例:.(使用当前接受的答案,我也得到了相同的错误,因此人们正在预测这样的用例或为其他人构建库,无论您选择哪种解决方案,都可能需要进行特殊测试。[].concat.apply([], Array(300000).fill().map(_=>[1,2,3]))