413

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

> 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]
4

12 回答 12

775

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

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

console.log(a);

于 2013-02-06T07:40:20.727 回答
595

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

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

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

于 2016-02-03T02:57:03.427 回答
304

apply当使用带有or的对象的大多数函数时callcontext参数必须是您正在处理的对象。

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

于 2013-02-06T07:41:14.063 回答
84

您可以使用Array.concat

var result = a.concat(b);
于 2013-02-06T07:37:28.183 回答
43

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

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

输出将是

a = [1,2,3,4,5,6]
于 2020-09-04T07:50:53.443 回答
25

如果您想要替代Array.concatECMAScript 2015(又名 ES6、ES2015)中的替代方案,它不会修改数组而是返回一个新数组,您可以像这样使用扩展运算符

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

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

如果您想查看某些 ES2015 功能是否在您的浏览器中工作,请查看Kangax 的兼容性表

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

于 2017-04-16T09:38:23.670 回答
6

有很多答案推荐使用:Array.prototype.push(a, b). 这是个好方法,但是如果你有很大的 b,你会遇到堆栈溢出错误(因为 args 太多)。这里要小心。

请参阅连接 N 个数组的最有效方法是什么?更多细节。

于 2018-04-04T13:45:45.560 回答
5

更简单的方法是

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

另一种方法是

a = [...a, 4,5,6]

如果你想创建另一个数组

const b = a.concat(7,8,9)
于 2021-08-20T04:18:05.457 回答
1

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

我就是这样做的

//declaration
productList= [] as  any;

现在push记录

this.productList.push(obj.lenght, obj2.lenght, items);
于 2020-07-31T07:04:47.057 回答
1

我有同样的疑问,就我而言,一个更简单的解决方案对我有用:

let array = []
array.push(1, 2, 4, "string", new Object())
console.log(array)
// logs [ 1, 2, 4, 'string', {} ]
于 2022-01-16T06:12:27.753 回答
-1

请使用 ES6扩展运算符

let a = [1,2,3];
let b = [4,5,6];
a = [...a,...b];
// [1,2,3,4,5,6]
于 2021-10-09T12:45:05.543 回答
-2
var a=[];
a.push({
 name_a:"abc",
 b:[]
});

a.b.push({
  name_b:"xyz"
});
于 2017-03-20T12:31:51.073 回答