如何以变异的方式在JS中连接数组?

时间:2017-08-29 22:20:40

标签: javascript concatenation

在JS中以变异方式连接数组的最佳方法是什么?我的问题:

var a = [1,2,3]
var b = a;
a = a.concat([4,5,6]) //<-- typical way of array concatenation in JS
console.log(a) //[1,2,3,4,5,6]
console.log(b) //[1,2,3] <-- I'd like it to be the same like a here

我当然可以使用一些循环,但我想知道是否有更快更清洁的方法来实现它。

4 个答案:

答案 0 :(得分:10)

push变异数组,但它需要参数序列,所以我们使用apply

var a = [1,2,3]
var b = a
a.push.apply(a, [4,5,6])
console.log(a) //=> [1, 2, 3, 4, 5, 6]
console.log(b) //=> [1, 2, 3, 4, 5, 6]

在ES6中,您可以使用点差运算符...

a.push(...[4, 5, 6])

答案 1 :(得分:1)

您可以使用push可以获取可变数量的参数的事实,并将所有参数推送到数组的末尾。然后你可以写:

a.push.apply(a, [1, 2, 3]);

由于apply会将参数数组转换为函数的参数列表。

答案 2 :(得分:0)

您可以将“a”保留为属性,以便可以通过引用访问它:

var myObj = {};
myObj.a = [1,2,3]
var b = myObj;
myObj.a = myObj.a.concat([4,5,6])

console.log(myObj.a);
console.log(b.a);

答案 3 :(得分:0)

您可以在此使用push.apply更新a而无需创建新变量:

a.push.apply(a, [4,5,6]);

或许更容易理解:

Array.prototype.push.apply(a, [4,5,6]);

<强> DEMO

简而言之apply调用函数push,第一个参数设置为this(对象上下文),第二个参数设置为数组。例如,它相当于a.push(element1, ..., element10)