为什么我不能在JavaScript中连接数组引用?

时间:2013-05-21 21:12:55

标签: javascript arrays concat

我有两个数组,一个作为函数的引用(参数),另一个是作为函数的一部分创建的 - 与此处描述的完全相同:

Add two arrays without using the concat method

我按照上面的建议使用了push.apply()方法,但有人可以向我解释一下,如果将数组作为一个数组发送到函数中,为什么我不能使用concat()来合并两个数组参考

3 个答案:

答案 0 :(得分:9)

请参阅MDN上的Array.concat

  

对新阵列的任何操作都不会影响原始阵列,反之亦然。

这使得 否则,它的工作原理如上面的MDN链接所述。

答案 1 :(得分:8)

如果您使用concat,原始数组将未修改。如果您有参考,您将看不到新元素。

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
arr1.push.apply(arr1, arr2);

基本上这样做:

[ "a", "b" ].push("c", "d");

apply将数组转换为参数列表。顺便说一下apply的第一个参数是context,在这种情况下为arr1,因为您希望将推送应用于arr1

您可以使用concat

var arr1 = [ "a", "b" ];
var arr2 = [ "c", "d" ];
var arr3 = arr1.concat(arr2);

这样就保留了原来的arr1。您已经创建了一个包含arr1arr2元素的新数组。如果您对原始arr1有引用,则未修改。这可能是不想使用concat的原因。

答案 2 :(得分:0)

假设我们有2个数组“ a”和“ b”。 Array.concat方法将返回新的Array“ c”实例,该实例表示a和b之间的串联,而不会出现a或b的任何突变Array.push 返回被推送元素的最后一个索引并变异 this 实例。

从ES6(或15,不确定)开始,可以解压缩参数,也可以使用push进行串联(没有有害代码)

a = [1,2,3,4]; // a=[1,2,3,4];
b = [5,6,7,8]; // b=[5,6,7,8]; 
a.push(...b)   // a=[1,2,3,4,5,6,7,8]; b=[5,6,7,8]