Josh Pitzalis
metoda redukce JavaScriptu je jedním ze základních kamenů funkčního programování. Pojďme prozkoumat, jak to funguje, kdy byste ji měli používat, a některé z skvělých věcí, které může udělat.
základní redukce
použijte ji, když: máte řadu částek a chcete je všechny přidat.,
const euros = ;const sum = euros.reduce((total, amount) => total + amount); sum // 118.11
Jak používat:
- V tomto příkladu, Snížit přijímá dva parametry, celkový a aktuální výše.
- cykly redukce metody přes každé číslo v poli podobně jako V for-smyčce.
- Když smyčka začíná celková hodnota je číslo na levém (29.76) a aktuální částka je ta vedle (41.85).
- v tomto konkrétním příkladu chceme přidat aktuální částku k součtu.,
- výpočet se opakuje pro každou částku v poli, ale pokaždé, když se aktuální hodnota změní na další číslo v poli, pohybuje se doprava.
- pokud v poli nejsou žádná další čísla, metoda vrátí celkovou hodnotu.
ES5 verzi Snížit Metody V Javascriptu
Pokud jste nikdy použít ES6 syntaxe dříve, nenechte příkladu výše zastrašit., Je to úplně stejné jako psaní:
var euros = ; var sum = euros.reduce( function(total, amount){ return total + amount});sum // 118.11
použijeme const
místo var
a nahradíme slovo function
s „tlustá šipka“ (=>
) po parametry, a jsme vynechat slovo „návrat“.
pro ostatní příklady použiji syntaxi ES6, protože je stručnější a ponechává méně prostoru pro chyby.
nalezení průměru metodou redukce v JavaScriptu
namísto zaznamenávání součtu byste mohli před vrácením konečné hodnoty rozdělit součet délkou pole.,
způsob, jak toho dosáhnout, je využití dalších argumentů v metodě redukce. Prvním z těchto argumentů je index. Podobně jako for-loop, index odkazuje na kolikrát reduktor má smyčku přes pole. Posledním argumentem je samotné pole.
mapa a filtr jako redukce
Pokud můžete pomocí funkce snížit vyplivnout průměr, můžete jej použít jakýmkoli způsobem.,
například byste mohli před přidáním dohromady zdvojnásobit celkový nebo poloviční počet, nebo použít příkaz if uvnitř reduktoru pouze pro přidání čísel, která jsou větší než 10. Můj názor je, že metoda redukce v JavaScriptu vám dává Mini CodePen, kde můžete psát jakoukoli logiku, kterou chcete. Bude opakovat logiku pro každou částku v poli a poté vrátí jednu hodnotu.
jde o to, že nemusíte vždy vracet jednu hodnotu. Pole můžete zmenšit na nové pole.,
například umožňuje snížit řadu částek do jiného pole, kde se každá částka zdvojnásobí. K tomu musíme nastavit počáteční hodnotu našeho akumulátoru na prázdné pole.
počáteční hodnota je hodnota celkového parametru při spuštění redukce. Počáteční hodnotu nastavíte přidáním čárky následované počáteční hodnotou uvnitř závorek, ale po kudrnatých závorkách (šroubované v příkladu níže).
const average = euros.reduce((total, amount, index, array) => { total += amount return total/array.length}, 0);
v předchozích příkladech byla počáteční hodnota nulová, takže jsem ji vynechal., Vynecháním počáteční hodnoty bude součet výchozí na první částku v poli.
nastavením počáteční hodnoty na prázdné pole pak můžeme každou částku posunout do celkového počtu. Pokud chceme zmenšit pole hodnot do jiného pole, kde se každá hodnota zdvojnásobí, musíme posunout částku * 2. Pak vrátíme součet, když už nejsou žádné částky, které by se tlačily.
const euros = ;const doubled = euros.reduce((total, amount) => { total.push(amount * 2); return total;}, );doubled //
vytvořili jsme nové pole, kde se každá částka zdvojnásobí. Mohli bychom také odfiltrovat čísla, která Nechceme zdvojnásobit přidáním prohlášení if uvnitř našeho reduktoru.,
tyto operace jsou metody map a filtrů přepsané jako metoda redukce.
pro tyto příklady by mělo větší smysl používat mapu nebo filtr,protože jsou jednodušší. Výhoda použití redukce přichází do hry, když chcete mapovat a filtrovat společně a máte spoustu dat k překonání.
Pokud řetěz mapy a filtrovat společně děláte práci dvakrát. Filtrujete každou jednotlivou hodnotu a poté mapujete zbývající hodnoty. S redukcí můžete filtrovat a pak mapovat v jednom průchodu.,
použijte mapu a filtr, ale když začnete spouštět spoustu metod dohromady, Nyní víte, že je rychlejší snížit data místo toho.
Vytvoření Shodují s Snížení Metoda V Javascriptu
Používejte, když: máte sbírku předmětů, a chcete vědět, kolik z každé položky v kolekci.
tally položek v poli naše počáteční hodnota musí být prázdný objekt, ne prázdné pole, jako to bylo v posledním příkladu.
protože se chystáme vrátit objekt, můžeme nyní uložit páry klíčových hodnot celkem.,
fruitBasket.reduce( (tally, fruit) => { tally = 1; return tally;}, {})
na našem prvním průchodu chceme, aby název prvního klíče byl naší aktuální hodnotou a chceme mu dát hodnotu 1.
to nám dává objekt se všemi plody jako klíče, každý s hodnotou 1. Chceme, aby se množství každého ovoce zvýšilo, pokud se opakují.
Chcete-li to provést, na naší druhé smyčce zkontrolujeme, zda náš celkový obsahuje klíč s aktuálním ovocem reduktoru. Pokud tomu tak není, vytvoříme ji. Pokud ano, zvýšíme částku o jednu.
fruitBasket.reduce((tally, fruit) => { if (!tally) { tally = 1; } else { tally = tally + 1; } return tally;}, {});
přepsal jsem přesně stejnou logiku stručnějším způsobem nahoru.,
Zploštění pole polí se Snižují Metody V Javascriptu
můžeme použít snížit srovnat vnořené částky do jednoho pole.
počáteční hodnotu nastavíme na prázdné pole a potom zřetězíme aktuální hodnotu na součet.
const data = , , ];const flat = data.reduce((total, amount) => { return total.concat(amount);}, );flat //
více často než ne, informace jsou vnořeny složitějšími způsoby. Například, řekněme, že chceme jen všechny barvy v datové proměnné níže.
const data = }, {a: 'tired', b: 'panther', c: }, {a: 'sad', b: 'goldfish', c: }];
projdeme každý objekt a vytáhneme barvy. Děláme to ukazováním množství.c pro každý objekt v poli., Poté použijeme smyčku forEach, abychom posunuli každou hodnotu v vnořeném poli do celkového počtu.
pokud potřebujeme pouze jedinečné číslo, můžeme zkontrolovat, zda číslo již existuje celkem, než jej zatlačíme.
potrubí s redukcí
zajímavým aspektem metody redukce v JavaScriptu je to, že můžete redukovat funkce, čísla a řetězce.
řekněme, že máme sbírku jednoduchých matematických funkcí. tyto funkce nám umožňují zvýšit, snížit, zdvojnásobit a snížit částku na polovinu.,
z jakéhokoli důvodu musíme zvýšit, pak zdvojnásobit a poté snížit částku.
můžete napsat funkci, která bere vstup, a vrací (vstup + 1) * 2 -1. Problém je v tom, že víme, že budeme muset zvýšit částku třikrát, pak ji zdvojnásobit, pak ji snížit, a pak ji v určitém okamžiku v budoucnu snížit na polovinu. Nechceme pokaždé přepsat naši funkci, takže použijeme redukci k vytvoření potrubí.
potrubí je termín používaný pro seznam funkcí, které transformují určitou počáteční hodnotu na konečnou hodnotu., Naše potrubí se bude skládat z našich tří funkcí v pořadí, v jakém je chceme používat.
let pipeline = ;
místo toho, abychom snížili pole hodnot, které snižujeme nad naším potrubím funkcí. Funguje to proto, že počáteční hodnotu nastavíme jako částku, kterou chceme transformovat.
const result = pipeline.reduce(function(total, func) { return func(total);}, 1);result // 3
protože potrubí je pole, lze jej snadno upravit. Pokud chceme něco třikrát snížit, pak to zdvojnásobit , snížit a snížit na polovinu, pak prostě změníme potrubí.
var pipeline = ;
funkce redukce zůstává přesně stejná.,
hloupé chyby, abyste se vyhnuli
Pokud neprojdete počáteční hodnotou, reduce předpokládá, že první položka v poli je vaše počáteční hodnota. To fungovalo dobře v prvních několika příkladech, protože jsme sčítali seznam čísel.
Pokud se snažíte spojit ovoce a vynecháte počáteční hodnotu, pak se věci stanou divnými. Zadání počáteční hodnoty je snadná chyba a jedna z prvních věcí, kterou byste měli zkontrolovat při ladění.
další častou chybou je zapomenout vrátit součet. Musíte něco vrátit, aby funkce redukce fungovala., Vždy dvakrát zkontrolujte a ujistěte se, že skutečně vracíte požadovanou hodnotu.
Nástroje, Tipy & Odkazy
- Vše, co v tomto příspěvku pochází z fantastické video série na intelektuál názvem Představujeme Snížit. Dávám Mykola Bilokonsky plný kredit a jsem mu vděčný za všechno, co teď vím o použití metody redukce v JavaScriptu. Snažil jsem se přepsat hodně z toho, co vysvětluje svými vlastními slovy jako cvičení, abych lépe porozuměl každému konceptu., Také je pro mě snazší odkazovat na článek, na rozdíl od videa, když si musím vzpomenout, jak něco udělat.
- MDN snižuje štítky dokumentace, které jsem nazval celkem
accumulator
. Je důležité to vědět, protože většina lidí se na to bude odkazovat jako na akumulátor, pokud o něm čtete online. Někteří lidé to nazývajíprev
jako v předchozí hodnotě. Všechno se týká stejné věci. Když jsem se učil, bylo pro mě snazší myslet na celkem., - Pokud byste chtěli praxi pomocí snížení doporučuji registraci na freeCodeCamp a dokončení tolik na středně pokročilé algoritmy, jak můžete pomocí snížit.
- pokud jsou proměnné „const“ v příkladových úryvcích pro vás nové, napsal jsem další článek o proměnných ES6 a proč je chcete použít.
- také jsem napsal článek s názvem potíže se smyčkami, které vysvětlují, jak používat mapu () a filtr (), pokud jsou pro vás nové.
Díky za čtení! Pokud byste chtěli být upozorněni, když píšu nový článek, zadejte prosím svůj e-mail zde.,
a pokud se vám článek líbil, sdílejte jej prosím na sociálních médiích, aby ho ostatní mohli najít.