Ymmärtää, JavaScript Vähentää 5 Esimerkkejä

reduce() menetelmä JavaScript taulukot suorittaa ”reducer” – toiminnon everyelement array järjestyksessä, kulkee paluu arvo edellisestä reducercall seuraavaan vähennysventtiilillä soittaa. reduce() toiminto on yhteinen jumalan puoleen, sekaannusta, mutta se voi myös tehdä koodia paljon paremmin luettavissa, kun se yhdistetään muihin funktionaalisen ohjelmoinnin abstraktioita.,Tässä 4 yleistä esimerkkiä ja 1 ei-niin-yleistä esimerkkiä, jotka osoittavat, miten reduce(): tä käytetään.

Yhteen Joukko Numerot

reduce() tutorials aloittaa tästä esimerkki: annetaan taulukon numerot , laskea summa. Näin voisi tiivistää rivistön, jossa on tavallinen vanha for silmukka.,

function sum(arr) { let sum = 0; for (const val of arr) { sum += val; } return sum;}sum(); // 16

Tässä on vastaava esimerkki käyttäen reduce():

function sum(arr) { const reducer = (sum, val) => sum + val; const initialValue = 0; return arr.reduce(reducer, initialValue);}sum(); // 16

reduce() – toiminto on ensin 2 parametrit ovat funktion reducer() saamaansa mielivaltainen initialValue. JavaScript kutsuu sitten reducer() käytössä eachelement array kanssa varaaja arvo kuin ensimmäisen parametrin.Akku alkaa initialValue, ja sitten JavaScript käyttää returnvalue kunkin reduce() soita kuin uusi varaaja.,

Talk is cheap, show me the code. Joten tässä on nopea esimerkki siitä, miten voit mightimplement yksinkertaistettu reduce() toiminnon for silmukoita.

Yhteen Joukko Numeerisia Ominaisuuksia

reduce() toiminto itsessään on usein enemmän sekaannusta kuin hyötyä.Jos tarvitset vain joukon numeroita, saatat olla parempi käyttämällä for Loopia., Mutta, kun se yhdistetään muihin joukko menetelmiä, kutenfilter() ja map(),reduce() alkaa näyttää yhä houkuttelevalta.

esimerkiksi, oletetaan, että sinulla on joukko line kohteita, ja haluat laskemaan summa kunkin rivikohdan total omaisuutta.

Tässä on yksi tapa lisätä rivikohtiin total käyttäen reduce():

lineItems.reduce((sum, li) => sum + li.total, 0); // 17.5

Tämä toimii, mutta on vähemmän koottavat. Parempi vaihtoehto on ensinmap() saada total.,

lineItems.map(li => li.total).reduce((sum, val) => sum + val, 0);

Miksi tämä toinen lähestymistapa on parempi? Koska voit abstrakti pois thereducer toiminto sum(), ja käyttää sitä missä haluat sumup array.

Tämä on tärkeää, koska, vaikka luulet sumReducer() tulee neverchange, se on. Esimerkiksi yllä oleva koodi ei selitä sitä, että0.1 + 0.2 !== 0.3 Javascriptissä. Tämä on yleinen virhe laskettaessa tulkitun kielen oppeja. Binääriset liukupisteet ovat outoja.,Joten sinun oikeastaan tarvitse kierros:

const { round } = require('lodash');function sumReducer(sum, val) { // Round to 2 decimal places. return _.round(sum + val, 2);}

reduce() tekee siitä helppoa käyttää logiikkaa, kuten sumReducer() koko appusing toimintoa ketjutus. Joten voit muuttaa logiikkaasi kerran sen sijaan, että hakisit jokaisen for Loopin sovelluksessa.

Etsi Suurin Arvo

esimerkiksi, oletetaan, että sinulla on joukko JavaScript päivämäärät, ja haluat löytää viimeisin päivämäärä.

const dates = .map(v => new Date(v));

Yksi tapa on lajitella array ja ottaa viimeinen osa sortedarray., Se toimii, mutta ei ole niin tehokas kuin se voisi olla, ja lajittelu array päivämäärät JavaScript on ei-triviaali.

sen Sijaan, voit käyttää reduce() ja tee vähennysventtiilillä palauttaa viimeaikaisten päivämäärä löytynyt toistaiseksi.

Ryhmittely-Arvot

Koska joukko esineitä, jossa age ominaisuus:

const characters = ;

Miten voit palauttaa kartan, joka sisältää kuinka monta merkkiä on annettuage? Esimerkiksi oikean lähdön edellä array olisi{ 29: 2, 59: 1 }.,

Here ’ s how you can do that with reduce().

Bonus: Lupaus Ketjutus

Oletetaan, että sinulla on joukko async toiminnot, jotka haluat suorittaa sarjaan.Siellä on ei-standardi promise.series functionfor tämän, mutta voit myös tehdä tämän kanssa reduce().

Liikkuvat

reduce() toiminto on tehokas työkalu. Abstrahoimalla ulos suodattimetja pelkistimien, voit vahvistaa yhteisiä tehtäviä, kuten ”yhteen joukko numeroita”erillinen toiminto helpottaa refaktorointi ja KUIVA-er-koodi.

Share

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *