为什么我不能在JavaScript中连接数组引用?
Why can't I concat an array reference in JavaScript?
我有两个数组,一个来自函数的引用(参数),另一个是作为函数的一部分创建的-与这里描述的场景完全相同:
不使用concat方法添加两个数组
我按照上面的建议使用push.apply()方法,但是有人可以向我解释一下,为什么我不能使用concat()来合并两个数组,如果数组作为引用发送到函数中?
参考数组。连接MDN:
对新数组的任何操作都不会对原数组产生影响,反之亦然
这使得它的行为不同于 Array.push.apply
, 将改变原始Array对象-必须使用Array.concat
的返回值。否则,它会像上面的MDN链接中解释的那样工作。
如果使用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
的一个原因。
假设有两个数组"a"answers"b"。Array.concat
方法将返回 Array
"c"的新实例,该实例表示a与b之间的连接,而a或b没有任何突变。Array.push
返回 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]
相关文章:
- 在 JavaScript 中连接字符串或数组是否更快
- '对象不是函数'当使用angular连接两个json数组时
- Knockout JS-将函数名与数组值连接起来
- 连接与数组对象相关的文本:方式和位置
- JS通过替换连接数组
- 如何通过连接多个异步javascript调用,从对象数组中排序并获取第一个obejct
- 有没有一种优雅的方式来连接数组数组
- 在 Javascript 中连接数组
- 如何连接数组中对象的两个属性以用作ngOptions中的标签
- 在 Node 中连接数组循环.js glob 结果
- 从开始索引到结束索引连接数组
- 合并两个嵌套对象,并在侧面连接数组
- 如何在jQuery中连接数组值,但要格式化它们
- JavaScript中如何用撇号和逗号连接数组
- 如何在JavaScript匿名函数中连接数组
- 为什么我不能在JavaScript中连接数组引用?
- 递归连接数组与JS/Coffeescript
- 在没有任何公共属性的情况下垂直连接数组的更好方法
- 试图在javascript中连接数组和变量
- 如何使用单选按钮连接数组元素