javascript - Lägg till flera element i en array
Jag försöker pusha flera element som en array, men får ett fel:
> a = []
[]
> a.push.apply(null, [1,2])
TypeError: Array.prototype.push called on null or undefined
Jag försöker göra liknande saker som jag skulle göra i Ruby, jag tänkte att apply är något som *.
>> a = []
=> []
>> a.push(*[1,2])
=> [1, 2]
Svar #1
Du kan lägga till flera element i en array på följande sätt
var a = [];
a.push(1, 2, 3);
console.log(a);Svar #2
Nu i ECMAScript2015 (även känt som ES6) kan du använda spridningsoperatorn för att lägga till flera objekt på en gång:
var arr = [1];
var newItems = [2, 3];
arr.push(...newItems);
console.log(arr);Se Kangaxs ES6-kompatibilitetstabell för att se vilka webbläsare som är kompatibla
Svar #3
När du använder de flesta funktioner för objekt med apply eller call, MÅSTE context-parametern vara det objekt du arbetar med.
I det här fallet behöver du a.push.apply(a, [1,2]) (eller mer korrekt Array.prototype.push.apply(a, [1,2]))
Svar #4
Som ett alternativ kan du använda Array.concat:
var result = a.concat(b);
Detta skulle skapa och returnera en ny array istället för att lägga till objekt i samma array. Det kan vara användbart om du inte vill ändra källarrayen utan snarare göra en ytlig kopia av den.
Svar #5
Om du vill ha ett alternativ till Array.concat i ECMAScript 2015 (a.k.a. ES6, ES2015) som, precis som det, inte ändrar arrayen men returnerar en ny array kan du använda spridningsoperatorn så här:
var arr = [1];
var newItems = [2, 3];
var newerItems = [4, 5];
var newArr = [...arr, ...newItems, ...newerItems];
console.log(newArr);Observera att detta är annorlunda än push-metoden eftersom push-metoden ändrar/modifierar arrayen.
Om du vill se om vissa ES2015-funktioner fungerar i din webbläsare, kolla Kangax kompatibilitetstabell.
Du kan också använda Babel eller en liknande transpiler om du inte vill vänta på webbläsarstöd och vill använda ES2015 i produktion.
