Sådan konverteres argumenter-objekt til et array i JavaScript

arguments objekt er et array-lignende objekt, der er tilgængeligt i alle ikke-pile-funktioner, og som repræsenterer værdierne af de argumenter, der sendes til den pågældende funktion. Du kan bruge numeriske indekser til at få adgang til værdier af argumenter fra arguments objekt. For eksempel kan det første argument tilgås som arguments[0] , kan det andet argument tilgås som arguments[1] , og så videre.

Du kan se arguments objekt er meget som et array, men det er ikke et egentligt array. Selvom den har length egenskab, kan du ikke bruge de almindelige array-metoder som map() , slice() og filter() på den.

For at konvertere en arguments objekt til en ægte Array objekt, er der flere tilgængelige måder, som vi vil diskutere nedenfor.

Hvileparametre

Restparametersyntaksen blev introduceret i ES6, der giver os mulighed for at repræsentere et uspecificeret antal argumenter som et array. For at bruge hvileparametre kan du præfikse funktionens sidste parameter med ... (spredningsoperatør). Det vil konvertere alle resterende brugerleverede argumenter til et standard JavaScript-array.

Da resten parameter er en rigtig Array instans, i modsætning til arguments objekt, behøver du ikke udføre nogen konvertering:

const sort = (...numbers) => {
    return numbers.sort((a, b) => a - b);
};

sort(1, 4, 5, 2);

// [ 1, 2, 4, 5 ]

Array.from()

En anden måde at konvertere arguments på objekt til et array i ES6 er ved at bruge Array.from() metoden. Denne metode konverterer et array-lignende eller et iterabelt objekt til en Array eksempel:

function sort() {
    return Array.from(arguments).sort((a, b) => a - b);
}

sort(1, 4, 5, 2);

// [ 1, 2, 4, 5 ]

Array.prototype.slice()

Endelig den sidste metode til at konvertere en arguments objekt til et array er ved at bruge Array.prototype.slice() metode. Meget ligesom at konvertere en NodeList til en matrix, Array 's slice() metoden bruger arguments objekt og transformerer det til et ægte array:

function sort() {
    const args = Array.prototype.slice.call(arguments);
    return args.sort((a, b) => a - b);
}

const sorted = sort(1, 4, 5, 2);

console.log(sorted);

// [ 1, 2, 4, 5 ]

Du kan også bruge en kortfattet form af slice() metode:

const args = [].slice.call(arguments);

Array.prototype.slice.call() virker i alle moderne og gamle browsere inklusive IE 6+. Du bør bruge denne tilgang, hvis du vil understøtte gamle browsere.

Hvis du vil vide mere om JavaScript-arrays, og hvordan du bruger dem til at gemme flere stykker information i en enkelt variabel, kan du tage et kig på denne vejledning.