Jak převést objekt argumentů na pole v JavaScriptu

arguments object je objekt podobný poli přístupný ve všech funkcích bez šipky, který představuje hodnoty argumentů předávaných této funkci. Pro přístup k hodnotám argumentů z arguments můžete použít číselné indexy objekt. Například k prvnímu argumentu lze přistupovat jako arguments[0] , k druhému argumentu lze přistupovat jako arguments[1] , a tak dále.

Můžete vidět arguments objekt je hodně podobný poli, ale není to skutečné pole. Ačkoli má length vlastnost, nemůžete použít běžné metody pole jako map() , slice() a filter() na to.

Chcete-li převést arguments objekt proti skutečnému Array objektu, existuje několik dostupných způsobů, o kterých budeme diskutovat níže.

Parametry zbytku

Syntaxe parametru rest byla zavedena v ES6, což nám umožňuje reprezentovat blíže nespecifikovaný počet argumentů jako pole. Chcete-li použít zbývající parametry, můžete před posledním parametrem funkce uvést ... (operátor šíření). Převede všechny zbývající argumenty dodané uživatelem do standardního pole JavaScript.

Protože parametr rest je skutečný Array na rozdíl od arguments objekt, nemusíte provádět žádnou konverzi:

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

sort(1, 4, 5, 2);

// [ 1, 2, 4, 5 ]

Array.from()

Další způsob, jak převést arguments objekt do pole v ES6 je pomocí metody Array.from(). Tato metoda převede objekt podobný poli nebo iterovatelný objekt na Array instance:

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

sort(1, 4, 5, 2);

// [ 1, 2, 4, 5 ]

Array.prototype.slice()

Konečně poslední metoda pro převod arguments objekt do pole je pomocí Array.prototype.slice() metoda. Podobně jako při převodu seznamu NodeList na pole Array 's slice() metoda přijímá arguments objekt a převede jej na skutečné pole:

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 ]

Můžete také použít stručnou formu slice() metoda:

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

Array.prototype.slice.call() funguje ve všech moderních i starých prohlížečích včetně IE 6+. Tento přístup byste měli použít, pokud chcete podporovat staré prohlížeče.

Chcete-li se dozvědět více o JavaScriptových polích a jak je používat k ukládání více informací do jedné jediné proměnné, podívejte se na tuto příručku.