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.

Relaterade artiklar