Každý vývojář, který se specializuje na jakýkoli programovací jazyk, vám řekne, že jazyk poskytuje mocný nástroj, který používá jen zřídka a přeje si, aby o něm věděl víc. Pro mě je to Array.prototype.reduce
. Docela mě baví druhý Array
metody jako map
, filter
a find
, ale reduce
je ten, o kterém jsem věděl, že je mocný, ale nikdy jsem pro něj neměl moc využití.
Až když jsem refaktoroval část kódu Firefox DevTools Debugger, našel jsem skvělý případ použití pro reduce
-- ten, který plánuji používat v budoucnu.
Metody jako forEach
a map
byly vytvořeny, aby se zabránilo vedlejším účinkům, a reduce
není výjimkou. V tomto případě však reduce
může vrátit Object
jiné než Array
. Vezměte si například tento případ:
// Samples sources const sources = [ { id: "server1.conn13.child1/39", url: "https://davidwalsh.name/" }, { id: "server1.conn13.child1/37", url: "https://davidwalsh.name/util.js" } ]; // Return an object of sources with the keys being "id" const sourcesMap = sources.reduce((map, source) => { map[source.id] = source return map; }, {});
Ve výše uvedeném příkladu vezmeme pole Source
objektů a vrátí jeden objektový literál s každým Source
's id
jako klíč:
{ "server1.conn13.child1/39": { "id": "server1.conn13.child1/39", "url": "https://davidwalsh.name/" }, "server1.conn13.child1/37": { "id": "server1.conn13.child1/37", "url": "https://davidwalsh.name/util.js" } }
Všimněte si, že {}
, což je poslední argument pro reduce
, je spouštěcí/výchozí objekt, který má být vrácen. Pokud v poli nebyly žádné položky, {}
by bylo vráceno. Také si uvědomte, že metoda pole vrací objektový literál a nikoli upravené pole!
Je šílené, že jsem nepoužil reduce
více, ale to je prostě život v našem oboru – všichni máme několik rozhraní API, která jsme příliš nepoužívali. Jakou funkci JavaScriptu jste často viděli, ale nepoužívali jste?