evf*_*qcg 249 javascript
我试图将多个元素作为一个数组推送,但是会出错
> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined
Run Code Online (Sandbox Code Playgroud)
我正在尝试做类似于我在红宝石中所做的事情,我觉得这就apply像是*.
>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
Run Code Online (Sandbox Code Playgroud)
小智 572
您可以通过以下方式将多个元素推送到数组中
var a = [];
a.push(1, 2, 3);
console.log(a);Run Code Online (Sandbox Code Playgroud)
can*_*nac 375
现在在ECMAScript2015(又名ES6)中,您可以使用spread运算符一次追加多个项目:
var arr = [1];
var newItems = [2, 3];
arr.push(...newItems);
console.log(arr);Run Code Online (Sandbox Code Playgroud)
请参阅Kangax的ES6兼容性表,了解哪些浏览器兼容
Nie*_*sol 218
当使用带有apply或的对象的大多数函数时call,context参数必须是您正在处理的对象.
在这种情况下,您需要a.push.apply(a, [1,2])(或更正确Array.prototype.push.apply(a, [1,2]))
Vis*_*ioN 63
你可以使用Array.concat:
var result = a.concat(b);
Run Code Online (Sandbox Code Playgroud)
Nik*_*dav 36
如果要添加多个项目,则必须使用扩展运算符
a = [1,2]
b = [3,4,5,6]
a.push(...b)
Run Code Online (Sandbox Code Playgroud)
输出将是
a = [1,2,3,4,5,6]
Run Code Online (Sandbox Code Playgroud)
Joh*_*ohn 17
如果你想Array.concat在ECMAScript 2015(又名ES6,ES2015)中替代它,像它一样,不修改数组但返回一个新数组,你可以使用扩展运算符,如下所示:
var arr = [1];
var newItems = [2, 3];
var newerItems = [4, 5];
var newArr = [...arr, ...newItems, ...newerItems];
console.log(newArr);Run Code Online (Sandbox Code Playgroud)
请注意,这与push方法不同,因为push方法会变异/修改数组.
如果您想查看浏览器中是否有某些ES2015功能,请查看Kangax的兼容性表.
如果您不想等待浏览器支持并希望在生产中使用ES2015,也可以使用Babel或类似的转换程序.
有很多答案推荐使用:Array.prototype.push(a, b). 这是一个很好的方法,但是如果你的 b 真的很大,你就会有堆栈溢出错误(因为参数太多)。这里要小心。
请参阅连接 N 个数组的最有效方法是什么?更多细节。
| 归档时间: |
|
| 查看次数: |
271704 次 |
| 最近记录: |