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
- 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.
- 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].
- currentIndex – O índice do elemento atual.
- 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 ---
