使用es6 spread来连接多个数组

时间:2017-04-17 17:01:55

标签: javascript ecmascript-6

我们都知道你可以这样做:

let arr1 = [1,2,3];
let arr2 = [3,4,5];
let arr3 = [...arr1, ...arr2]; // [1,2,3,3,4,5]

但是如何使这个动态连接N个数组呢?

10 个答案:

答案 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

&#13;
&#13;
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;
&#13;
&#13;

您可以使用reduceArray.prototype.concat执行相同的操作。这与接受的答案类似,但在这种情况下x.concat(y)完全可以接受(并且可能更快),并没有毫无意义地使用扩展语法

&#13;
&#13;
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;
&#13;
&#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);