Reduce nad polem s funkcemi rubrika: Programování: JavaScript

2 mawebis
položil/-a 2.9. 13:05

Ahoj všichni,

potřeboval si nad jedním vstupem zavolat postupně pár funkcí a pracovat s výsledkem z minulé funkce. Napadlo mě na to použít array reduce, který by měl jako vstup jednotlivé funkce v poli. Tj, něco jako:

const result = [
  (res) => (res + 2),
  (res) => (res * 2)
].reduce(
  (res, fce) => fce,
  0
);

což mi ovšem nedává výsledek 4 (k vstupní 0 přičtu 2 a pak vynásobím 2), ale nadefinovanou funkci.

Vím, že v javascriptu na toto byla i nějaká možnost jak za sebe řadit X funkcí, které se postupně volají a předávají si výsledek, ale nemohu si vzpomenout.

Pomůže někdo prosím?
Díky moc,
Petr

odkaz Vyřešeno
6 Milan Lempera
odpověděl/-a 2.9. 16:45

to co hledáš je kompozice funkcí, typicke jde o funkce pipe, nebo compose, má je kdejaká funkcionální knihovna třeba https://ramdajs.com/docs/#pipe

popsané je to třeba tady https://www.freecodecamp.org/news/pipe-and-compose-in-javascript-5b04004...

Komentáře

  • mawebis : To je přesně to co jsem myšlenkově hledal. A koukám, že jsem s mým řešením nebyl až tak daleko od oficiálního řešení : ) Děkuji moc, Petr 2.9. 17:20
  • Občan : kompozice ma opacny smer, tohle je aplikace funkci. Vstupem pro funkci v kompozici je vystup nasleduji funkce. 5.9. 17:15
  • Milan Lempera : Kompozice jako taková je funkce compose, která má opačný směr, pipe popisuje třeba právě zmíněná ramda jako "left-to-right function composition". Slovo aplikace bych v tomto kontextu nepoužil, mám ho spojené s voláním funkce, případně s "partial application", ale pokud máš nějaký odkaz na tohle téma, rád si počtu.... 6.9. 8:28
  • Občan : Kompozice má směr v samotné definici. "compose" funkce směr musí dodržovat, když už má kompozici v názvu. "left-to-right function composition" je jako "jet dopředu na zpátečku". Pipe je super, navíc z dílny matematika. A aplikace? Odkaz mě nenapadá, možná to je jenom hantýrka kolem Haskellu, kde je ještě na to termín dolar operator. Termín "Pipe" se za pár desítek let už tak usadil, že je asi lepší. 7.9. 0:02

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.