Masa javascript. Reduceți

Programare 2021-02-07 01:56:03

JavaScript Array.reduce () Publicat inițial de Jefflowery în i te urasc? Permiteți-mi să spun formularele … Array.Reduce () a existat de ceva timp. Îmi place harta (), filtrul () și găsirea (), operează într-o matrice de valori prin invocarea unei funcții de apel invers. Iată un exemplu de site-uri Developer.mozilla.org: const array1 =; Const redus = (acumulator, valoare curentă) = > acumulator + valoare curentă; // 1 + 2 + 3 + 4 console.log (array1.reduce (reductor)); // rezultat așteptat: 10 // 5 + 1 + 2 + 3 + 4 Console .log (array1.reduce (reductor, 5)); // Rezultatul așteptat: 15 sunete simple, nu? Despre plângeri: 0. Nu face ceea ce vă așteptați Să privim din nou acest lucru: const array1 =; Const redus = (acumulator, valoare curentă) = > acumulator + valoare curentă; / / Mă așteptam: 1 + 2 + 3 + 4 == = 10 Modificați acum funcția de reducere pentru a adăuga 1 la fiecare valoare din matrice, apoi adăugați valoarea de mai sus. Am adăugat 1 la patru elemente ale matricei, sper să obțin Somyo din 14. Construiți Array1 =; Const reductor = (acumulator, actualvalue) = > acumulator + curenvalue + 1; / (1 + 1) + (2 + 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 14 console.log (Array1.reduce (reductor)); // Rezultat neașteptat: 13 Așteptați … Ce? Se pare că primul element al matricei este valoarea inițială a acumulatorului. Apoi, în loc de (1 + 1) + (2 + 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 14 De fapt: 1 + (2 + 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 13 Toate acestea reduc exemplele online folosind o funcție de sumă ne place ilustrația, putem merge. Desigur, puteți găsi răspunsul corect: Adăugați pur și simplu o valoare de acumulator inițial ca al doilea argument la metoda de reducere: consola.log (array1 .Reduce (reductor, 0)); // Rezultatul dorit: 14 1. Are un nume incorect, numele reduce sugerează că reduce o matrice de element la un subset al acestor elemente. Nu este cu adevărat ceea ce face el. Puteți face opusul reducerii, de fapt: const array1 =; // o creștere constantă a patru elemente = (acumulator, valoare curentă) = > {acumulator.push (valoarea curentă); acumulator.push (valoarea curentă * valoarea curentă); Retur acumulator; }; consola.log (array1.reduce (multiplicator,); // ieșire: matrice (8 eelemente) și nu este chiar necesar să returneze o matrice: Construiți Array1 =; Transformator transformator = (acumulator, valoare curentă) = > {acumulator = valoarea curentă * valoarea curentă; Retur acumulator; }; Consola.log (array1.reduce (transformator, {})); // rezultat: Obiect {1: 1, 2: 4, 3: 9, 4: 16} 2. Ordinea argumentelor de apel invers este extremă Comparați returnarea returnării hărții (), filtrul (), găsirea () și reducerea (.

{{} căutare: (valoarea curentă, index, matrice, acest) = > {{{{} colaps: (acumulator, valoare curentă, India x, matrice) = > {} Returnul dvs. de apel va obține primul argument al acumulatorului, și nu în currentValue; În plus, niciun parametru nu acceptă acest argument. 3. Eroare: Myvar.reduce nu este o funcție a fost răsfățată de Lodash, care se ocupă atât de matrice, cât și de obiecte ca colecții, iar colecțiile au metode de cartografiere, găsirea, filtrul și contractul. Nu dacă JavaScript a minimizat: Var Obj1 = {mi: „câine”, are: „Fleas”}; Valori const = (acumulator, valoare curentă) = > acumulator.push (valoarea curentă); consola.log (obj1.reduce (valori)); // > Eroare: obj1.reduce nu este o funcție ca Dana Carvey spuse: „Nu, Gane nu o face. Nu ar fi în siguranță. (Da, sunt așa Vechiul „>

{acc.push (valoare); retur acc} consola.log (obiect.entries (obj1) .reduce (valori); // >

matrice 4 . Acumulatorul Uneori este opțional; uneori rezultatele aleatoare sunt ușor de uitat o valoare inițială de acumulator, chiar și atunci când aveți nevoie de el. Luați exemplul anterior, cu o modificare: Câine „, are:” Fleas „}; Valori constante = (acc,) = > {acc.push (valoare); retur acc} Console.log (obiect.entries (obj1) .dreduce (valori )); // > matrice a observat diferența în cod? dificil de detectat. Mai rău, obțineți o matrice de valori, cu excepția faptului că primul s valid. Din fericire, într-o zi voi avea câteva teste! 5. Indian? Hei? Oh, uitați întoarcerea acumulatorului. Tampit.Nu comit niciodată această eroare: var obj1 = {mi: „câine”, are: „Fleas”}; Câine constant = (acc,) = > {dacă (key === „mi”) {acc.push (valoare); înapoi conform; }} Console.log (obiect.entries (obj1) .reduce (câine,)); // > nedefinit ar trebui să returneze întotdeauna acumulatorul: var obj1 = {meu: „câine”, are: „Fleas”}; Câine constant = (acc,) = > {dacă (key === „mi”) {acc.push (valoare); } Returnați conform; } Console.log (Objet.entries (Obj1) .Reduce (câine,); Deci, ce ar trebui să recomand în loc de minimizare ()? Întotdeauna folosesc array.reduce (), și ar trebui să o faceți. Știți particularitățile. Este ca un mic Chihuahua care vă mușcă tocurile și, uneori, te-a prins dacă nu sunteți atent, dar mai ales este inofensiv (și o bimană utilă decât un Chihuahua). reducere bună! SECȚIUNEA >

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *