2
respostas

[Aula: 04] [Módulo: Conhecendo Arrays][Exercício 03] - É possível resolver usando forEach?

Oi gente, tudo bem? Estou resolvendo o exercício 03 da aula do Módulo: JavaScript : conhecendo arrays. Consegui resolver usando a forma tradicional, com um loop for iterando sobre os elementos e verificando se pra cada iteração o valor procurado está presente. Entretanto, gostaria de saber se consigo uma solução usando forEach. tentei diversas formas aqui, mas, por algum motivo que não estou conseguindo enxergar, meu código não está resolvendo da forma correta. Até tentei apelar pelo método de objeto indexOf, porém, sem sucesso. Meu código está assim:

const arrayRef = [1, 5, 10, 20, 14];
const valorTeste = 20;
const saidaF = '-1'; 
const i = 0;
let valorEncontrado;

valor = arrayRef.forEach(verificaValor);


function verificaValor (valor) {
    if (valor == valorTeste){
        valorEncontrado = arrayRef.indexOf(valor);
        //console.log(valor)
        // console.log(i)
    }
    else{
        valorEncontrado = saidaF;
    }
    return valorEncontrado
}

console.log(valorEncontrado)

Em resumi, estou passando via forEach por cada elemento do arrayRef, e dentro do próprio for each tentanto compará-lo com um valor de referência (valorTeste) e então procurar qual é o índice desse elemento dentro do do próprio arrayRef. Caso a condição não seja atendida, o valor de saída assume uma variável que eu criei como saídaF para representar o -1.

O problema é que os resultados são sempre '-1', tanto para os casos em que o o valorTeste não está no arrayRef quanto para os casos em que está. A única situação em que o resultado é correto, é quando eu passo o último valor do arrayRef (nesse nosso caso, o valor 14).

Depois disso ainda precisarei implementar a posição em que o elemento foi encontrado, para isso, criei a variável "i" para funcionar como um contador e exibir seu valor no momento em que o valorTeste for encontrado. Mas ainda não conseguir chegar nisso.

Será que é possível uma solução via forEach?

Obrigado sempre!!

2 respostas

Olá, Rafael.

Tudo bem?

Sim, é possível resolver o exercício utilizando o forEach, mas há alguns pontos no seu código que precisam ser ajustados. O forEach não retorna valores diretamente, então a lógica de encontrar o índice precisa ser tratada de forma diferente. Aqui está uma sugestão de como você pode tentar resolver isso:

  1. Utilize uma variável externa para armazenar o índice quando o valor for encontrado.
  2. Evite sobrescrever o valor de valorEncontrado toda vez que a condição não for atendida, pois isso está causando o problema de sempre retornar -1.

Aqui está uma versão ajustada do seu código:

const arrayRef = [1, 5, 10, 20, 14];
const valorTeste = 20;
let valorEncontrado = '-1'; // Inicialmente, assume que o valor não foi encontrado

arrayRef.forEach((valor, index) => {
    if (valor === valorTeste) {
        valorEncontrado = index; // Atualiza valorEncontrado com o índice do valor encontrado
    }
});

console.log(valorEncontrado);

Neste código, a função forEach percorre o array arrayRef e, para cada elemento, verifica se ele é igual ao valorTeste. Se for, atualiza a variável valorEncontrado com o índice do elemento encontrado. Caso contrário, valorEncontrado permanece com o valor inicial de -1.

Espero ter entendido e conseguido ajudar. Qualquer dúvida manda aqui. Bons estudos!

Oi Renan, boa tarde.

Muito obrigado pelas instruções. Realmente eu havia esquecido que o forEach permite entrar com um parâmetro de index para realizar a contagem. Com isso fica mais fácil de poder extrair o valor do contador de índice e atribuir a condição que desejamos. Excelente, agora deu certo!

Ainda, como complemento e para exercitar os conceitos. Eu fiz a mesma a solução que você propôs, mas agora em vez de usar o index dentro do forEach eu usei o método indexOf para já trazer o valor do índice direto numa variável (saida) que eu criei.

Dá uma olhada. Fica como contribuição pro fórum

const arrayRef = [1, 5, 10, 20, 14];
const valorTeste = 2;
let i = 0;
let valorEncontrado;
let saida = -1

arrayRef.find(valor => {
    if (valor == valorTeste){
    saida = arrayRef.indexOf(valor)
    //console.log(saida)
    }
})
console.log(saida)