Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Verificar se um ítem (string, número) já existe no array

Amigos, eu não consegui entender essa validação pra saber se o ingrediente já foi adicionado pelo usuário antes. Não entendi essa variável criada "var existe" iniciado em "false", o relacionamento dela com a questão da repetição dos itens já inseridos pelo usuário no prompt, desde a vídeo aula não consegui entender a explicação dele sobre isso. Se alguém conseguir me explicar mais claro, em outras palavras, por gentileza. Valeu!

Esse é o código:

<script>
    var ingredientes = [];

    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));

    var contador = 1;

    while( contador <= quantidade) {

        var ingrediente = prompt("Informe o ingrediente " + contador);

        var existe = false;

        for( var posicao = 0; posicao < ingredientes.length; posicao++) {

            if( ingredientes[posicao] == ingrediente) {

                existe = true;
                break;
            }
        }

        if( existe == false) {

            ingredientes.push(ingrediente);
            contador++;
        }
    }

    console.log(ingredientes);
</script>
3 respostas
solução!

Olá Amadeu.

Veja, a primeira linha da validação é essa:

for( var posicao = 0; posicao < ingredientes.length; posicao++) {

Esse for percorre todo o array de ingredientes. Se o ingrediente que você informou já existe no array, a variável existe é setada em true.

existe = true;

Essa variável indica que o for encontrou um ingrediente que já foi adicionado antes. Ou seja, ele existe no array.

Para que o programa não perca tempo analisando mais posições, o comando break termina o for. Ele já encontrou um ingrediente igual ao seu, então ele termina.

Logo depois, o ingrediente só é adicionado se existe == false. Ou seja, se NÃO houver ingrediente encontrado anteriormente.

Resumindo, a variável existe é um auxiliar. Ela é usada para que, posteriormente, o programa saiba se esse ingrediente existe ou não. É setada em false inicialmente porque antes de testar o programa não tem como saber se o ingrediente está no array.

Espero que tenha ajudado.

Abraços e bons estudos!

Consegui entender esse problema em outras palavras, depois de muita reflexão:

A variável "existe" foi atribuida ao valor "false" inicialmente. Quando o programa identifica no primeiro "if" que o valor inserido pelo usuário (var ingrediente) é igual a um valor existente em uma das posições do array (ingredientes[posicao]), ele instrui para mudar o valor de "existe" para "true", ou seja, ele muda o valor da variável e sai do "for" para o "while". Em seguida, ao comparar o novo valor de "existe" e ver que não bate com o do segundo "if" (que pertence ao while), ele volta para o inicio do while (que é o prompt). Ou seja, se o valor da variável "existe" não for mudado para "true", ele vai bater com o segundo "if" e seguir as instruções que estão lá dentro, ele insere o valor colocado pelo usuário, incrementa o contador e continua para completar as outras posições do array:

if( existe == false) {

        ingredientes.push(ingrediente);
        contador++;
    }

Obrigado pela ajuda, Tomás, ajudou num ponto pra eu chegar a essa conclusão. Abraço!

Que isso Amadeu, estamos aqui para isso!

Bons estudos.