我正在尝试将多个元素作为一个数组推送,但是会出现错误
> 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]
答案 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)
当使用apply
或call
的对象的大部分功能时,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);