一尘不染

如何在不创建新数组的情况下用另一个数组扩展现有的JavaScript数组

javascript

似乎没有办法用另一个数组扩展现有的JavaScript数组,即模拟Python的extend方法。

我要实现以下目标:

>>> a = [1, 2]
[1, 2]
>>> b = [3, 4, 5]
[3, 4, 5]
>>> SOMETHING HERE
>>> a
[1, 2, 3, 4, 5]

我知道有一个a.concat(b)方法,但是它创建了一个新数组,而不是简单地扩展第一个数组。我想要一种有效的算法,该算法在a明显大于b(即不复制a)的情况下有效。


阅读 315

收藏
2020-04-25

共1个答案

一尘不染

.push方法可以采用多个参数。您可以使用传播运算符将第二个数组的所有元素作为参数传递给.push

>>> a.push(...b)

如果您的浏览器不支持ECMAScript 6,则可以.apply改用:

>>> a.push.apply(a, b)

或者,如果您认为更清楚:

>>> Array.prototype.push.apply(a,b)

请注意,如果数组b太长(麻烦开始于大约100,000个元素,具体取决于浏览器),所有这些解决方案都将失败,并产生堆栈溢出错误。 如果不能保证b足够短,则应使用其他答案中描述的基于标准循环的技术。

2020-04-25