我们都知道你可以这样做:
let arr1 = [1,2,3];
let arr2 = [3,4,5];
let arr3 = [...arr1, ...arr2]; // [1,2,3,3,4,5]
但是如何使这个动态连接N个数组呢?
答案 0 :(得分:38)
一种选择是使用reduce
:
let arrs = [[1, 2], [3, 4], [5, 6]];
arrs.reduce((a, b) => [...a, ...b], []);
当然,这是一个缓慢的解决方案(二次时间)。或者,如果您可以使用Lodash,_.flatten
可以完全按照您的要求进行操作,并且更有效(线性时间)。
修改强>
或者,改编自下面的Xotic750评论,
[].concat(...arrs);
哪个应该有效(线性时间)。
答案 1 :(得分:10)
另一种选择可能是:
const nArrays = [
[1, 2, 3, 4, 5],
[6, 7, 8, 9],
[10, 11]
];
const flattened = [].concat(...nArrays);
console.log(flattened)
答案 2 :(得分:5)
let fruits = ["apples", "bananas", "pears"];
let vegetables = ["corn", "potatoes", "carrots"];
let produce = [...fruits, ...vegetables];
console.log(produce);

答案 3 :(得分:2)
单独使用扩展语法不能这样做,因为扩展语法要求您知道预先连接多少个数组。但是,您可以编写以下函数:
function concatN(...arguments) {
let accumulator = [];
for(let arg = 0; arg < arguments.length; arg = arg + 1) {
accumulator = [...accumulator, ...arguments[arg]];
}
return accumulator;
}
但是,它可能不会非常有效(重复使用扩展语法是O(n²))。使用Array.prototype.concat
会更好。你可以这样做:
[].concat(all, of, your, arrays);
答案 4 :(得分:2)
您可以在for..of
循环中使用spread元素将数组值连接到单个数组
let arr1 = [1,2,3];
let arr2 = [3,4,5];
let arr3 = [];
for (let arr of [arr1, arr2 /* , arrN */]) arr3.push(...arr);
console.log(arr3);
答案 5 :(得分:2)
以下解决方案对我有用(ES6中的传播算子):
let array = ['my','solution','works'];
let newArray = [];
let newArray2 = [];
newArray.push(...array); //adding to same array
newArray2.push([...array]); //adding as child/leaf/sub-array
console.log(newArray);
console.log(newArray2);
答案 6 :(得分:1)
您可以使用递归函数和Array.prototype.concat
const concatN = (x,...xs) =>
x === undefined ? [] : x.concat(concatN(...xs))
console.log(concatN([1,2,3], [4,5,6], [7,8,9]))
// [1,2,3,4,5,6,7,8,9]
&#13;
您可以使用reduce
和Array.prototype.concat
执行相同的操作。这与接受的答案类似,但在这种情况下x.concat(y)
完全可以接受(并且可能更快),并没有毫无意义地使用扩展语法
const concatN = (...xs) =>
xs.reduce((x,y) => x.concat(y), [])
console.log(concatN([1,2,3], [4,5,6], [7,8,9]))
// [1,2,3,4,5,6,7,8,9]
&#13;
答案 7 :(得分:1)
最好的选择是使用 FlatMap,它可以帮助我们将多个数组合并为一个数组。
示例:
let arrs = [[1, 2], [3, 4], [5, 6]];
arrs.flatMap(a => a);
结果是
> (6) [1, 2, 3, 4, 5, 6]
快乐编码...
答案 8 :(得分:0)
根据es6
function mergeTwo(arr1, arr2) {
let result = [...arr1, ...arr2];
return result.sort((a,b) => a-b);
}
答案 9 :(得分:0)
let arr1 = [1,2,3];
let arr2 = [3,4,5];
let arrs = [arr1, arr2].flat(); // [1,2,3,3,4,5]
console.log(arrs);