小编典典

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

all

似乎没有办法用另一个数组扩展现有的 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)时有效的算法。

注意:不是如何将某些内容附加到数组?-- 这里的目标是将一个数组的全部内容添加到另一个数组中,并“就地”完成,即不复制扩展数组的所有元素。


阅读 120

收藏
2022-02-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足够短,则应使用另一个答案中描述的标准基于循环的技术。

2022-02-25