将多个元素推送到数组

IT技术 javascript
2021-03-07 16:31:30

我试图将多个元素作为一个数组推送,但出现错误:

> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined

我正在尝试做我会在 ruby​​ 中做的类似的事情,我认为那apply是类似*.

>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
6个回答

您可以通过以下方式将多个元素推送到数组中

var a = [];
    
a.push(1, 2, 3);

console.log(a);

谁能解释一下,为什么这比接受的答案有更多的选票?它可能更容易,但不太灵活。如果你想合并 2 个数组,这行不通。
2021-04-29 16:31:30
@FlorentArlandis array.concat 无法将第二个数组添加到第一个数组。它将创建一个新的。我知道这很相似。点差运算符正是我要找的。只需查看那里的其他答案和评论即可了解详细信息。
2021-05-02 16:31:30
@BluE ES6 现在允许你做这样的事情array1.push(...array2)array1.push(array2[0], array2[1], array2[2])除了 array2 中元素数量的限制(大约 100,000)
2021-05-06 16:31:30
这个答案和选择的答案会产生不同的,也许是出乎意料的结果。a.push(1) 与 a.push([1])
2021-05-15 16:31:30
@BluE 如果你想合并两个数组,只需使用 array.concat()
2021-05-20 16:31:30

现在在 ECMAScript2015(又名 ES6)中,您可以使用扩展运算符一次附加多个项目:

var arr = [1];
var newItems = [2, 3];
arr.push(...newItems);
console.log(arr);

查看Kangax的ES6兼容性表,查看兼容哪些浏览器

这有数组大小限制。尝试使用大数组。你会得到例外。
2021-04-30 16:31:30
whaaaaaaat 这太棒了,另外,如果你在typescript中这样做,它会编译为 push.apply 所以你有向后兼容性
2021-05-20 16:31:30

使用apply使用对象的大多数功能时callcontext参数必须是您正在处理的对象。

在这种情况下,您需要a.push.apply(a, [1,2])(或更准确地说Array.prototype.push.apply(a, [1,2])

我相信它在旧浏览器中是 65,535,在现代浏览器中几乎是无限的(4B)。
2021-04-22 16:31:30
使用此方法可以推送多少个元素有限制吗?我知道 JavaScript 有一个参数限制,在使用“apply”函数时是这种情况吗?
2021-05-12 16:31:30

您可以使用Array.concat

var result = a.concat(b);
@suricactusarr1 = arr1.concat(arr2)没什么大不了的,看起来更干净。推送到旧阵列或用新阵列替换旧阵列取决于您的需要。如果你处理 10m+ 元素推送到旧数组会工作得更快,如果你管理小块,你几乎找不到任何速度差异。这两个选项都是完全合法的。
2021-05-03 16:31:30
他想推送到现有数组,所以Array.prototype.push.apply(arr1, arr2)是正确答案,因为使用arr1.concat(arr2)您正在创建一个新数组。
2021-05-05 16:31:30
@YuvalA。prototype.push.apply只调用push一次。上面的区别不是关于速度的必要,而是就地操作与创建新数组的区别。如果我有一个方法接受一个数组并且应该就地修改它怎么办?concat方法不可能工作,即使使用 VisionN 的代码,因为它不会修改函数调用者的变量。
2021-05-10 16:31:30
Array.prototype.concat 返回新数组。
2021-05-15 16:31:30
a = a.concat(b) 仍然是比 Array.prototype.push.apply(arr1, arr2)
2021-05-19 16:31:30

如果要添加多个项目,则必须使用扩展运算符

a = [1,2]
b = [3,4,5,6]
a.push(...b)

输出将是

a = [1,2,3,4,5,6]
使用此方法可以推送多少个元素有限制吗?
2021-05-17 16:31:30