Analise o seguinte trecho de código em Javascript:function m...
Analise o seguinte trecho de código em Javascript:
function myFunction(parameter) {
const a = parameter.map(p => {
return p.value
})
const b = a.reduce((c, d) => {
return c *= d * 3
}, 1)
return b
}
console.log(myFunction([{ name: 'a', value: 3 }, { name : 'b', value: 18 }]))
O que será impresso na saída padrão?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
Gabarito: E - 486
Para resolver esta questão e alcançar corretamente a alternativa E, precisamos entender o funcionamento das funções map() e reduce() em JavaScript, além de reconhecer como operações aritméticas são realizadas dentro destas funções.
A função map() cria um novo array com os resultados da chamada de uma função para cada elemento do array original. No caso do código apresentado, map()
está sendo aplicado ao parâmetro parameter
, que é um array de objetos. Cada objeto tem uma propriedade value
que é extraída e retorna um novo array somente com esses valores. Assim, o array a
se tornará [3, 18]
.
Em seguida, a função reduce() é usada para reduzir o array a um único valor. A função passada para reduce()
multiplica o acumulador c
pelo valor atual d
, multiplicado por 3, e o valor inicial do acumulador é definido como 1. Portanto, a operação realizada é uma multiplicação acumulativa dos elementos do array, cada um deles triplicado.
Calculando passo a passo:
- Inicialmente, o acumulador
c
é 1 (valor inicial), e o primeiro valord
do array é 3. A multiplicação é1 * 3 * 3
, resultando em 9. - Esse valor agora atua como o acumulador na próxima iteração, onde
d
é 18. A multiplicação é9 * 18 * 3
, resultando em 486.
Portanto, myFunction([{ name: 'a', value: 3 }, { name : 'b', value: 18 }])
retorna 486
, que é a resposta correta, representada pela alternativa E.
Clique para visualizar este gabarito
Visualize o gabarito desta questão clicando no botão abaixo
Comentários
Veja os comentários dos nossos alunos
reduce itera sobre o array acumulando o resultado final, precisa sempre lembrar que ele acumula
aquele 1 solto ali no final, depois do "return c *= d * 3" vai ser na verdade o valor inicial do reduce que vai ser acumulado
1º iteração (d = 3)
c=1
c = 1 * (3 * 3) = 9
2º iteração(d = 18)
c = 9
c = 9 * (18 * 3) = 9 * 54 = 486
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo