Um banco comercial possui em sua base de dados uma tabela qu...
Nesse contexto, considere o código JavaScript incompleto a seguir, do qual uma linha foi removida intencionalmente, na posição indicada com o comentário <<LINHA DE CODIGO>>.
function indicou(lista, indicador) { let resposta = []; for (let i = 0; i < lista.length; i++) { let item = lista[i]; if (item[0] === indicador) { if (!resposta.includes(item[1])) { //<< LINHA DE CODIGO >> resposta.push(item[1]); } } } return resposta; }
Que linha de código JavaScript pode ser escrita na posição de <<LINHA DE CODIGO>> para garantir uma implementação correta e recursiva?
Gabarito comentado
Confira o gabarito comentado por um dos nossos professores
A alternativa correta é a A. Agora, vamos entender o porquê e explorar os conceitos necessários para resolver a questão.
Esta questão aborda conceitos de recursividade e manipulação de arrays em JavaScript. Para resolver o problema, precisamos implementar uma função que calcule, de forma recursiva, todos os clientes indicados direta e indiretamente por um cliente específico. Vamos analisar cada parte da questão.
No código fornecido, a função indicou
recebe uma lista de pares de CPFs e um indicador
(CPF de quem indicou). O objetivo é retornar todos os CPFs que foram direta ou indiretamente indicados por esse indicador
.
A alternativa A — resposta = resposta.concat(indicou(lista, item[1]));
— é a correta porque:
- Concatenação Recursiva: Esta linha chama a função
indicou
de forma recursiva, passando como novo indicador o CPF atualmente indicado (item[1]
). O resultado dessa chamada recursiva é concatenado ao arrayresposta
, garantindo que todos os CPFs indicados direta e indiretamente sejam incluídos na resposta final.
Agora, vejamos por que as outras alternativas estão incorretas:
B — resposta.concat(indicou(lista, item[1]));
- Erro de Retorno: Esta linha não atualiza o array
resposta
com o resultado da concatenação. O métodoconcat
retorna um novo array, mas aqui ele não está sendo atribuído a nenhuma variável.
C — resposta = indicou(lista, item[1]);
- Substituição Incorreta: Esta linha substituiria completamente o conteúdo de
resposta
com o resultado da chamada recursiva, perdendo assim os CPFs já adicionados anteriormente, o que não é o comportamento desejado.
D — resposta.push(item[0]);
- Inversão de Lógica: Esta linha tentaria adicionar o
indicador
(que éitem[0]
) ao arrayresposta
. No contexto dado, queremos adicionar oindicado
(item[1]
), não oindicador
.
E — indicou(lista, item[1]).forEach(resposta.push);
- Erro de Implementação: Embora a ideia de iterar sobre os resultados faça sentido, a maneira como
forEach
está sendo chamado não está correta. A funçãopush
não está recebendo corretamente os argumentos.
Esses detalhes são fundamentais para garantir que a função trabalhe de forma precisa com a lógica de indicação direta e recursiva. Compreender e aplicar essas nuances da recursão e manipulação de arrays é essencial para resolver de forma eficaz questões como esta.
Gostou do comentário? Deixe sua avaliação aqui embaixo!
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
O método .concat() retorna uma lista contendo os elementos do array original + o(s) elemento(s) retornados. Ou seja, ele não altera o array original que o invocou, e portanto, para atualizar o array "resposta" é necessário atribuir o retorno de .concat() para o mesmo.
O que explica o fato da alternativa B estar incorreta e o gabarito ser a alternativa A -> resposta = resposta.concat(indicou(lista, item[1]));
Clique para visualizar este comentário
Visualize os comentários desta questão clicando no botão abaixo