Javascript 将多个元素推送到阵列

Javascript 将多个元素推送到阵列,javascript,Javascript,我试图将多个元素作为一个数组推送,但出现错误: > 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] 您可以使用: 可以按以下方式将多个元素推入一个数组

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

> 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]
您可以使用:


可以按以下方式将多个元素推入一个数组

var a=[];
a、 推(1,2,3);

控制台日志(a)使用对象的大多数函数时,如果使用
应用
调用
,则
上下文
参数必须是您正在处理的对象

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

现在在ECMAScript 2015(也称为ES6)中,您可以使用一次附加多个项:

var-arr=[1];
var newItems=[2,3];
arr.push(…新项目);

控制台日志(arr)
如果您想要ECMAScript 2015(又称ES6,ES2015)中的
Array.concat
的替代方案,它不会修改数组,但会返回一个新数组,您可以使用类似的方法:

var-arr=[1];
var newItems=[2,3];
var newerItems=[4,5];
var newArr=[…arr,…newItems,…newerItems];

控制台日志(newArr)推荐使用的答案有很多:
Array.prototype.push(a,b)
。这是一个很好的方法,但是如果你有一个非常大的b,你会有堆栈溢出错误(因为参数太多)。这里要小心


有关更多详细信息,请参阅。

一次推送多个对象通常取决于您如何声明
数组

我就是这样做的

//declaration
productList= [] as  any;
现在
push
记录

this.productList.push(obj.lenght, obj2.lenght, items);

如果要添加多个项目,必须使用排列运算符

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

a = [1,2,3,4,5,6]

Array.prototype.concat返回新数组。他想推送到现有数组,所以
Array.prototype.push.apply(arr1,arr2)
是正确的答案,因为使用
arr1.concat(arr2)
你正在创建一个新数组。@suricactus
arr1=arr1.concat(arr2)
不是什么大问题,看起来更干净。推送到旧阵列或用新阵列替换旧阵列取决于您的需要。如果您处理10万个以上的元素,将其推到旧阵列将工作得更快,如果您管理小数据块,您几乎找不到任何速度上的差异。两种选择都是完全合法的。@YuvalA
prototype.push.apply
仅调用
push
一次。上面的区别在速度上不是必要的,而是就地操作与创建新阵列之间的区别。如果我有一个方法,它接受了一个数组,并且应该在适当的地方修改它呢?
concat
方法不可能工作,即使使用VisionN的代码,因为它不会修改函数调用者的变量。
a=a.concat(b)
的语法仍然比
Array.prototype.push.apply(arr1,arr2)
whaaaaaaaaat这太棒了,而且,如果您在typescript中执行此操作,它将编译为push.apply,因此您具有向后兼容性此答案和所选答案会产生不同的结果,可能是意外的结果。a、 推(1)与推(1)谁能解释一下,为什么这比公认的答案有这么多选票?这可能更容易,但灵活性较差。如果要合并两个数组,则此操作无效。@BluE如果要合并两个数组,只需使用array.concat()@FlorentArlandis array.concat无法将第二个数组添加到第一个数组中。它将创建一个新的。我知道这是相似的。spread运算符就是我要找的。请查看其他答案和注释以了解详细信息。@BluE ES6现在允许您执行类似于
array1.push(…array2)
的操作,其工作原理与
array1.push(array2[0]、array2[1]、array2[2])
完全相同,只是限制了array2中的元素数量(大约100000个),这并不能提供问题的答案。若要评论或要求作者澄清,请在其帖子下方留下评论。[我如何才能写出一个好的答案?]()对不起,我不能在答案下留下评论(我自己的除外),因为没有足够的声誉:)。但似乎这里应该提到这一点,以便有完整的概述。你能帮我做吗?然后我将删除我的答案。“类型断言表达式只能在TypeScript文件中使用。”这是VS Code对此处关键字any所说的。虽然此代码块可能会回答这个问题,但如果您能提供一点解释,说明为什么会这样做,那将是最好的。
a = [1,2]
b = [3,4,5,6]
a.push(...b)
a = [1,2,3,4,5,6]