Arrays JavaScript : Compreender a função de reduzir

Sintaxe

arr.reduce(callbackFunction, [initialValue])

O que reduzem fazer?

Reduzir é uma função que circula através de uma matriz.

As operações podem ser realizadas sobre a matriz através de uma função de retorno.

No fim das operações sobre a matriz, reduzir retorna um único valor

Reduzir pode ser usado, por exemplo, para o total de um carrinho de compras

Exemplo

  deixe arr = [1,2,3,4,5];
  arr.reduce( (acumulador, valor atual, currentIndex, ordem) => { 
      //algumas operações;
      retornar algo;
  });

 

A função de retorno

A função de retorno é invocado para cada elemento na matriz, passando em 4 argumentos que são passados ​​pelo função de reduzir.

Estes 4 argumentos, em seguida, pode ser usado em nossa função de callback.

Leva quatro argumentos

  1. acumulador – O primeiro elemento da matriz no primeiro ciclo ou o valor inicial, se fornecidos. Em seguida, o valor de retorno do laço precedente.
  2. valor atual – O elemento atual na matriz. Começa a partir do segundo elemento na matriz ou seja. arr[1], quando o argumento valor inicial não é passado. Se o argumento valor inicial é passado o valor então vigente começa a partir do 1º elemento no arr variedade[0].
  3. currentIndex – O índice do elemento atual.
  4. ordem – A matriz inteira.

Exemplo de trabalho

deixe arr = [1,2,3,4,5];

arr.reduce(
  (acumulador, valor atual, currentIndex, ordem) => {
    console.log(`acumulador (No dia 1º ciclo, acumulador é arr[0], então é devolvido o valor do ciclo anterior): ${acumulador}`);
    console.log(`CurrentValue (Ciclos através da matriz, a partir de arr[1]): ${valor atual}`);
    console.log(`currentIndex: ${currentIndex}`);
    console.log(`matriz: ${ordem}`);
    console.log('---');
    acumulador de retorno + valor atual;
  }
);

Saída

acumulador (No dia 1º ciclo, acumulador é arr[0], então é devolvido o valor do ciclo anterior): 1
valor atual (Ciclos através da matriz, a partir de arr[1]): 2
currentIndex: 1
ordem: 1,2,3,4,5
---
acumulador (No dia 1º ciclo, acumulador é arr[0], então é devolvido o valor do ciclo anterior): 3
valor atual (Ciclos através da matriz, a partir de arr[1]): 3
currentIndex: 2
ordem: 1,2,3,4,5
---
acumulador (No dia 1º ciclo, acumulador é arr[0], então é devolvido o valor do ciclo anterior): 6
valor atual (Ciclos através da matriz, a partir de arr[1]): 4
currentIndex: 3
ordem: 1,2,3,4,5
---
acumulador (No dia 1º ciclo, acumulador é arr[0], então é devolvido o valor do ciclo anterior): 10
valor atual (Ciclos através da matriz, a partir de arr[1]): 5
currentIndex: 4
ordem: 1,2,3,4,5
---

 

Fornecer o valor inicial

Especificando o segundo parâmetro (valor inicial) na função de reduzir causará initialValue para ser transmitido como o argumento acumulador na primeira espira.

Note-se que o valor atual no 1º ciclo agora começa no primeiro elemento da matriz

Exemplo de trabalho

  deixe arr = [1,2,3,4,5];

  arr.reduce(
  (acumulador, valor atual, currentIndex, ordem) => {
    console.log(`acumulador ( No 1º ciclo, este é o valor inicial, em seguida, o valor de retorno do laço precedente): ${acumulador}`);
    console.log(`CurrentValue (Ciclos através da matriz, a partir de arr[0]): ${valor atual}`);
    console.log(`currentIndex: ${currentIndex}`);
    console.log(`matriz: ${ordem}`);
    console.log('---');
    acumulador de retorno + valor atual;
  }, 0
);

Saída

acumulador ( No 1º ciclo, este é o valor inicial, em seguida, o valor de retorno do laço precedente): 0
valor atual (Ciclos através da matriz, a partir de arr[0]): 1
currentIndex: 0
ordem: 1,2,3,4,5
---
acumulador ( No 1º ciclo, este é o valor inicial, em seguida, o valor de retorno do laço precedente): 1
valor atual (Ciclos através da matriz, a partir de arr[0]): 2
currentIndex: 1
ordem: 1,2,3,4,5
---
acumulador ( No 1º ciclo, este é o valor inicial, em seguida, o valor de retorno do laço precedente): 3
valor atual (Ciclos através da matriz, a partir de arr[0]): 3
currentIndex: 2
ordem: 1,2,3,4,5
---
acumulador ( No 1º ciclo, este é o valor inicial, em seguida, o valor de retorno do laço precedente): 6
valor atual (Ciclos através da matriz, a partir de arr[0]): 4
currentIndex: 3
ordem: 1,2,3,4,5
---
acumulador ( No 1º ciclo, este é o valor inicial, em seguida, o valor de retorno do laço precedente): 10
valor atual (Ciclos através da matriz, a partir de arr[0]): 5
currentIndex: 4
ordem: 1,2,3,4,5
---