将多个元素推送到数组

时间:2013-02-06 07:36:37

标签: 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]

9 个答案:

答案 0 :(得分:503)

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

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

console.log(a);

答案 1 :(得分:326)

Now in ECMAScript2015 (a.k.a. ES6), you can use the spread operator to append multiple items at once:

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

See Kangax's ES6 compatibility table to see what browsers are compatible

答案 2 :(得分:201)

当使用applycall的对象的大部分功能时,context参数必须是您正在处理的对象。

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

答案 3 :(得分:57)

您可以使用Array.concat

var result = a.concat(b);

答案 4 :(得分:13)

如果你想在ECMAScript 2015(又名ES6,ES2015)中替换Array.concat,那么,就像它不修改数组但返回一个新数组一样,你可以使用spread operator,如下所示:

var arr = [1];
var newItems = [2, 3];
var newerItems = [4, 5];
var newArr = [...arr, ...newItems, ...newerItems];
console.log(newArr);

请注意,这与push方法不同,因为push方法会改变/修改数组。

如果您想查看某些ES2015功能是否适用于您的浏览器,请选中Kangax's compatibility table

如果您不想等待浏览器支持并希望在生产中使用ES2015,也可以使用Babel或类似的转发器。

答案 5 :(得分:2)

建议使用许多答案:Array.prototype.push(a, b)。这很好的方式,如果你真的有大b,你会有堆栈溢出错误(因为args太多)。这里要小心。

有关详细信息,请参阅What is the most efficient way to concatenate N arrays?

答案 6 :(得分:2)

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

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

输出将是

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

答案 7 :(得分:1)

var a=[];
a.push({
 name_a:"abc",
 b:[]
});

a.b.push({
  name_b:"xyz"
});

答案 8 :(得分:0)

一次按下多个对象通常取决于您如何声明array

这就是我的做法

//declaration
productList= [] as  any;

现在push条记录

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