为什么Array.push.apply不工作?
正如here所述,在javascript中将数组b附加到数组b的快速方法是a.push.apply(a, b)
。为什么Array.push.apply不工作?
你会注意到对象a被使用了两次。真的,我们只想要push
函数和b.push.apply(a, b)
完成完全相同的事情 - apply的第一个参数为应用函数提供this
。
我认为直接使用Array对象的方法可能更有意义:Array.push.apply(a, b)
。但是这不起作用!
我很好奇为什么不,以及是否有更好的方法来实现我的目标。 (运用push
功能,而不需要调用特定阵列的两倍。)
有什么不对Array.prototype.concat
?
var a = [1, 2, 3, 4, 5];
var b = [6, 7, 8, 9];
a = a.concat(b); // [1, 2, 3, 4, 5, 6, 7, 8, 9];
这不是真的在这里相关(我的问题是' *关于*如何连接两个数组) - 但是在我所关联的问题中,区分很明显。 'concat'返回一个新的函数,而不是将b附加到a。 – starwed 2013-03-16 00:43:44
不够公平:)它实际上原来'Array.prototype.push.apply(A,B)',是* *得多快:http://jsperf.com/arrayconcatvsarraypushapply – phenomnomnominal 2013-03-16 00:47:14
@phenomnomnominal,这在所有的不一定是真实的案例。你链接的jsperf扩展了每个循环中的数组长度,这当然会在每次迭代时使'concat'复制速度变慢,但是如果数组长度在每次迭代中保持固定,那么concat可以执行得更好,如下所示: http://jsperf.com/array-prototype-push-apply-vs-concat/5(查看所有其他修订版本,揭示了这个简单问题的许多简洁方法) – 2014-06-08 22:28:20
您还可以使用[].push.apply(a, b)
来缩短符号。
对于较短的表示法,您可以使用a.push(b) – 2016-09-22 00:13:57
@EugeneMala没有,这将导致整个阵列 “b” 的正被推入 “A” 作为新元件: 'VAR一个= [1,2],b = [3,4]。 a.push(b)中; // [1,2,Array [2]]' – subarachnid 2016-12-23 20:34:43
+1,用于发现Firefox的'Array.push',即使意外。 :-) – RobG 2013-03-16 01:35:12