我试图推多个元素作为一个数组,但得到一个错误:
> a = [] [] > a.push.apply(null, [1,2]) TypeError: Array.prototype.push called on null or undefined
我正在尝试做类似的事情,我在ruby中做,我认为apply是类似*的东西。
apply
*
>> a = [] => [] >> a.push(*[1,2]) => [1, 2]
作为一种替代方法,你可以使用Array.concat:
Array.concat
var result = a.concat(b);
这将创建并返回一个新数组,而不是将项推入同一个数组。如果您不想修改源数组,而是要对其进行浅拷贝,那么它可能很有用。
可以按以下方法将多个元素推入数组
var a = []; a.push(1, 2, 3); console.log(a);
当使用apply或call对象的大多数函数时,context参数必须是你正在处理的对象。
call
context
在这种情况下,你需要a.push.apply(a, [1,2])(或更准确地说,Array.prototype.push.apply(a, [1,2]))
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方法会改变/修改数组。
push
如果你想看看某些ES2015功能是否在你的浏览器中工作,检查Kangax的兼容性表。
如果你不想等待浏览器的支持,想在生产环境中使用ES2015,你也可以使用巴别塔或类似的转译器。
一次推入多个对象通常取决于如何声明array。
array
我就是这么做的
//declaration productList= [] as any;
现在push记录
this.productList.push(obj.lenght, obj2.lenght, items);
如果你想添加多个项,你可以使用Array.push()和展开操作符:
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)