我有两个数组,一个作为函数的引用(参数),另一个是作为函数的一部分创建的 - 与此处描述的完全相同:
Add two arrays without using the concat method
我按照上面的建议使用了push.apply()方法,但有人可以向我解释一下,如果将数组作为一个数组发送到函数中,为什么我不能使用concat()来合并两个数组参考
答案 0 :(得分:9)
答案 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
。您已经创建了一个包含arr1
和arr2
元素的新数组。如果您对原始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]