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

标签 javascript arrays concatenation

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

注意:不是 How to append something to an array? 的副本 -- 这里的目标是将一个数组的全部内容添加到另一个数组中,并“就地”完成,即不复制扩展数组的所有元素。

最佳答案

.push方法可以接受多个参数。您可以使用 spread operator将第二个数组的所有元素作为参数传递给 .push:

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

如果您的浏览器不支持 ECMAScript 6,您可以使用 .apply而是:

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

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

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

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

关于javascript - 如何在不创建新数组的情况下用另一个数组扩展现有 JavaScript 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1374126/

相关文章:

python - 连接大的 numpy 数组

javascript - 在 javaScript 中给定时间后图像没有改变

c++ - 就地去交错阵列?

python - 为 OpenCV imshow 连接 Numpy 数组

wpf - 将文本 block 中的字符串与静态资源连接起来(无绑定(bind))

c - 如何连接指针数组

javascript - javascript 中的属性与常量访问

javascript - 无法使用 localStorage 读取未定义的属性推送

javascript - 自定义初始化函数未在 TestCafe 中执行

c++ - 从文本文件中读取并将每个值存储在 C++ 中的单独数组中