Considere o trecho JavaScript exibido a seguir. const a = [1,2,3,4,5]; const b = a.map(xpto); alert(b); function xpto (x, y) { return x * y; } Assinale o conteúdo exibido na execução do script acima.
- A)0,2,6,12,20
Correta, porque map passa o valor e o índice para a função, e o produto valor x índice gera 0,2,6,12,20.
- B)1,2,3,4,5
Errada, porque isso seria apenas o próprio vetor original, sem a transformação feita pelo map.
- C)1,3,5,7,9
Errada, porque não há soma nem progressão aritmética no retorno da função.
- D)1,4,9,16,25
Errada, porque isso pareceria a multiplicação do número por ele mesmo, e não por sua posição no array.
- E)2,4,6,8,10
Errada, porque corresponde a dobrar os valores, mas a função não faz multiplicação por 2.
Gabarito: A
No JavaScript, o método map percorre o vetor e chama a função de callback para cada elemento, passando alguns argumentos automáticos: o valor atual, o índice e o próprio array. Aqui, a função xpto foi declarada com dois parâmetros, x e y, então ela recebe o valor do elemento em x e o índice em y. Isso já é a chave da questão: o segundo parâmetro não é o próximo número do vetor, mas a posição do item. Assim, a cada rodada, o retorno será x * y, ou seja, valor vezes índice. Fazendo as contas: 1*0 = 0, 2*1 = 2, 3*2 = 6, 4*3 = 12 e 5*4 = 20. O array resultante exibido no alert é, portanto, 0,2,6,12,20. Esse comportamento é bem típico do JavaScript e está alinhado com a especificação do Array.prototype.map: a callback recebe value, index e array. Muita gente olha só para o conteúdo do vetor e esquece do índice, e aí a pegadinha funciona bonito.