Pomocí Array snížit

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?