将多个元素推入数组

我试图推多个元素作为一个数组,但得到一个错误:

> 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]
546056 次浏览

作为一种替代方法,你可以使用Array.concat:

var result = a.concat(b);

这将创建并返回一个新数组,而不是将项推入同一个数组。如果您不想修改源数组,而是要对其进行浅拷贝,那么它可能很有用。

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

var a = [];
    

a.push(1, 2, 3);


console.log(a);

当使用applycall对象的大多数函数时,context参数必须是你正在处理的对象。

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

现在在ECMAScript2015(也就是ES6)中,你可以使用传播算子一次添加多个项:

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

参见Kangax的ES6兼容性表了解哪些浏览器是兼容的

如果你想在ECMAScript 2015 (a.k.a ES6, ES2015)中找到Array.concat的替代品,它和它一样,不修改数组,而是返回一个新数组,你可以像这样使用传播算子:

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

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

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

如果你不想等待浏览器的支持,想在生产环境中使用ES2015,你也可以使用巴别塔或类似的转译器。

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

我就是这么做的

//declaration
productList= [] as  any;

现在push记录

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

如果你想添加多个项,你可以使用Array.push()和展开操作符:

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

结果将是

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

更简单的方法是

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

另一种方法是

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

如果你想创建另一个数组

const b = a.concat(7,8,9)

我也有同样的疑问,但对我来说,有一个更简单的解决办法:

let array = []
array.push(1, 2, 4, "string", new Object())
console.log(array)
// logs [ 1, 2, 4, 'string', {} ]
想象你有一个array of first ten numbers但是缺少一个数字,say 6。 您可以使用以下代码将其插入到索引5的数组中

function insert(array, index, obj) {
return [...array.slice(0,index), obj, ...array.slice(index)]
}


let arr = [1,2,3,4,5,7,8,9,0]
arr = insert(arr, 5, 6)
console.log(arr)