Mesa de javascript. Reduzir

Programação 2021-02-07 01:56:03

javascript array.Reduce () originalmente publicado por jefflowery em i odeio você? Deixe-me dizer os formulários … o array.Reduce () existiu há algum tempo. Eu gosto de Map (), filtro () e localização (), opera em uma matriz de valores invocando uma função de retorno de chamada. Aqui está um exemplo de desenvolvedor de sites.mozilla.org: Const Array1 =; Const Reduci- (Acumulador, valor atual) = > Acumulador + valor atual; // 1 + 2 + 2 + 4 console.log (array1.Reduce (redutor)); // resultado esperado: 10 // 5 + 1 + 2 + 3 + 4 console .log (array1.Reduce (redutor, 5)); // Resultado esperado: 15 Parece simples, certo? Sobre as reclamações: 0. Não faz o que você espera Vamos ver isso novamente: Const Array1 =; Const Reduci- (Acumulador, valor atual) = > Acumulador + valor atual; / / Eu esperava: 1 + 2 + 3 + 4 == = 10 Agora modifique a função de redução para adicionar 1 em cada valor na matriz, adicione o valor acima. Eu adicionei 1 a quatro elementos da matriz, espero obter somyo de 14. Restrate Array1 =; Const Reducer = (Acumulador, CurrentValue) = > acumulador + acrentarvalue + 1; // (1 + 1) + (2+ 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 4 + 5 = 14 console.log (array1.Reduce (redutor)); // Resultado inesperado: 13 Espere … O que? Acontece que o primeiro elemento da matriz é o valor inicial do acumulador. Então, em vez de (1 + 1) + (2 + 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 14 de fato: 1 + (2 + 1) + (3 + 1) + (4 + 1) = 2 + 3 + 4 + 5 = 13 Todos aqueles que reduzem exemplos on-line usando uma função de soma que gostamos da ilustração, podemos ir. Claro, você pode encontrar a resposta correta: basta adicionar um valor de acumulador inicial como um segundo argumento ao método de redução: console.log (Array1 .Reduce (redutor, 0)); // Resultado desejado: 14 1. Tem um nome incorreto O nome reduz sugere que reduz uma matriz de elemento para um subconjunto desses elementos. Isso não é realmente o que ele faz. Você pode fazer o oposto de reduzir, de fato: Const Array1 =; // aumento constante de quatro elementos = (acumulador, valor atual) = > {acumulador.push (valor atual); acumulador.push (valor atual * valor atual); Acumulador de retorno; }; console.log (array1.Reduce (multiplicador); // Saída: Array (8 eelements) e nem é necessário retornar uma matriz: restrate array1 =; Transformador transformador = (acumulador, valor atual) = > {acumulador = valor atual * valor atual; Acumulador de retorno; }; Console.log (array1.Reduce (transformador, {})); // Result: Object {1: 1, 2: 4, 3: 9, 4: 16} 2. A ordem dos argumentos de retorno é extremo comparar os retornos de retorno do mapa (), filtro (), localização () e redução (): Mapa: (CurrentValue, índice, matriz, isto) = > {} filtro: (valor atual, índice, matriz, isto) = > {} pesquisa: (valor atual, índice, matriz, isto) = > {} colapso: (Acumulador, valor atual, Índia x, matriz)>

{} O seu retorno de chamada obterá o primeiro argumento do Accumulator ASee, e não em CurrentValue; Além disso, nenhum parâmetro aceita este argumento. 3. Erro: MyVar.Reduce não é uma função foi estragada por Lodash, que lida com matrizes e objetos como coleções, e as coleções têm métodos de mapeamento, localização, filtro e contrato. Não se JavaScript minimizou: var obj1 = {mi: “cão”, tem: “pulgas”}; Valores const = (acumulador, valor atual) = > acumulador.push (valor atual); console.log (obj1.Reduce (valores)); // > erro: obj1.reduce não é uma função como Dana Carvey disse: “Não, Gane não faz isso. Não seria seguro. (Sim, eu sou tão Velho.) Você sempre pode fazer algo assim, usando objeto objeto.Values: var obj1 = {mi: “cão”, A: “chips”}; valores constantes = (acc,) = > {acc.push (valor); return Acc} console.log (object.entries (obj1) .Reduce (valores,); // > Array 4 . O acumulador às vezes é opcional; Às vezes, os resultados aleatórios são fáceis de esquecer um valor de acumulador inicial, mesmo quando você precisar. Pegue o exemplo anterior, com uma modificação: var obj1 = {mi: “cão”, tem: “pulgas “}; Valores constantes = (acc,) = > {acr.push (valor); return Acc} console.log (Object.Endries (Obj1) .dredeuce (valores )); // > Matrix notificou a diferença no código? Difícil de detectar. Pior ainda, você recebe uma matriz de valores, exceto que o primeiro s válido. Felizmente, algum dia eu terei alguns testes! 5. Indiano? Ei? Oh, esquecendo devolver o acumulador. Idiota.Eu nunca cometo este erro: var obj1 = {mi: “cachorro”, tem: “pulgas”}; Cão constante = (acc,) = > {if (key === “mi”) {acc.push (valor); Voltar ACC; }} console.log (object.entries (obj1) .Reduce (cão)); // > Undefined Você deve sempre retornar o acumulador: var obj1 = {meu: “cachorro”, tem: “pulgas”}; Cão constante = (acc,) = > {if (key === “mi”) {acc.push (valor); } Retorno Acc; } console.log (objet.entries (obj1) .Reduce (cão,); Então, o que devo recomendar em vez de minimizar ()? Eu sempre uso array.Reduce (), e você também deve fazer isso. Conheça suas peculiaridades. É como um pequeno chihuahua que morde seus calcanhares e às vezes te pegou se você não é cuidadoso, mas principalmente é inofensivo (e bimas úteis que uma chihuahua). boa redução! Seção >

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *