Táboa de JavaScript. Reducir

Programación 2021-02-07 01:56:03

javascript array.reduce () Originalmente publicado por Jefflowery en i ódiote? Déixeme dicir as formas … a array.reduce () existiu por algún tempo. Gústame o mapa (), filtro () e atopa (), opera nunha matriz de valores invocando unha función de devolución de chamada. Aquí tes un exemplo de sitios developer.mozilla.org: const array1 =; Const reduct = (acumulador, valor actual) = > acumulador + valor actual; // 1 + 2 + 3 + 4 console.log (array1.reduce (reductor)); // Resultado esperado: 10 // 5 + 1 + 2 + 3 + 4 consola. (Array1.reduce (reductor, 5)); // Resultado esperado: 15 sons sinxelos, non? Sobre as queixas: 0. Non fai o que espera que volva ver isto: const array1 =; Const reduct = (acumulador, valor actual) = > acumulador + valor actual; / / Esperaba: 1 + 2 + 3 + 4 == = 10 Agora modifique a función de redución para engadir 1 en cada valor da matriz e engada o valor anterior. Engade 1 a catro elementos da matriz, espero obter Somyo desde 14. Constrato array1 =; Const reducter = (Accumulator, CurrentValue) = > Accumulator + CurrentValue + 1; // (1 + 1) + (2+ 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 14 console.log (array1.reduce (reductor)); // Resultado inesperado: 13 Espera … que? Resulta que o primeiro elemento da matriz é o valor inicial do acumulador. Entón, no canto de (1 + 1) + (2 + 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 14 De feito: 1 + (2 + 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 13 Todos aqueles que reducen exemplos en liña usando unha función de suma que nos gusta a ilustración, podemos ir. Por suposto, pode atopar a resposta correcta: simplemente engadir un valor de acumulador inicial como segundo argumento para o método de redución: console.log (array1 .reduce (reductor, 0)); // Resultado desexado: 14 1. Ten un nome incorrecto que o nome reduce suxire que reduce unha matriz de elemento a un subconxunto destes elementos. Iso non é realmente o que fai. Podes facer o contrario da redución, de feito: Const array1 =; // aumento constante de catro elementos = (acumulador, valor actual) = > {acumulator.push (valor actual); acumulador.push (valor actual * valor actual); Acumulador de retorno; }; console.log (array1.reduce (multiplicador); // saída: matriz (8 eelements) e nin sequera é necesario devolver unha matriz: constrate array1 =; Transformador transformador = (acumulador, valor actual) = > {acumulator = valor actual * valor actual; Acumulador de retorno; }; Console.log (array1.reduce (transformador, {})); // Resultado: Obxecto {1: 1, 2: 4, 3: 9, 4: 16} 2. A orde dos argumentos de devolución de devolución é extrema comparar os rendementos de retorno do mapa (), filtro (), atopar () e redución (): Mapa: (CurrentValue, índice, matriz, este) = > {} Filtro: (valor actual, índice, matriz, este) = > {} Buscar: (valor actual, índice, matriz, este) = > {} colapso: (acumulador, valor actual, India X, matrix) = > {} A súa devolución de chamadas obterá o acumulador ASSEE primeiro argumento e non en CurrentValue; Ademais, ningún parámetro acepta este argumento. 3. Erro: MyVar.Reduce non é unha función foi estragado por Lodash, que se encarga de ambas matrices e obxectos como coleccións e coleccións teñen métodos de mapeamento, atopar, filtro e contratos. Non se JavaScript minimizou: VAR Obj1 = {MI: “DOG”, ten: “pulgas”}; Valores const = (acumulador, valor actual) = > acumulator.push (valor actual); consola.log (obj1.reduce (valores)); // > Erro: obj1.reduce non é unha función como Dana Carvey dixo: “Non, Gane non o fai. Non sería seguro. (Si, eu son así antigos) sempre pode facer algo como isto, usando object.values obxecto: VAR obj1 = {Mi: “can”, A: “chips”} ;. valores constantes = (ACC), = > {acc.push (valor); devolver ACC} console.log (obxecto.entries (obj1) .reduce (valores); // > Array 4 . O acumulador ás veces é opcional; Ás veces, os resultados aleatorios son fáciles de esquecer un valor de acumulador inicial, mesmo cando o necesites. Tome o exemplo anterior, cunha modificación: VAR obj1 = {MI: “DOG”, ten: “pulgas “}; Valores constantes = (ACC,) = > {acc.push (valor); devolver ACC} console.log (obxecto.entries (obj1) .Dreduce (valores )); // > Matrix notou a diferenza no código? Difícil de detectar. Peor aínda, obtén unha matriz de valores, agás que o primeiro S válido. Afortunadamente, algún día teño algunhas probas! 5. Indio? Hey? Oh, esquecendo devolver o acumulador. Parvo.Nunca comete este erro: VAR Obj1 = {MI: “DOG”, ten: “pulgas”}; Can constante = (ACC,) = > {if (key === “mi”) {acc.push (valor); ACC; }} console.log (obxecto.entries (obj1) .reduce (can)); // > indefinido Debería devolver sempre o acumulador: var obj1 = {my: “can”, ten: “pulgas”}; Can constante = (ACC,) = > {if (key === “mi”) {acc.push (valor); } Devolve ACC; } console.log (objet.entries (obj1) .reduce (can); Entón, que debo recomendar no canto de minimizar ()? Eu sempre uso array.reduce (), e tamén debería facelo. Coñece as túas peculiaridades. É como un pequeno chihuahua que morde os tacóns e ás veces colleulle se non ten coidado, pero sobre todo é inofensivo (e bimas útiles que un Chihuahua). boa redución! Sección >

Deixa unha resposta

O teu enderezo electrónico non se publicará Os campos obrigatorios están marcados con *