Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Não devia aceitar ingrediente repetido mas aceita

Pessoal, boa tarde. O código abaixo não poderia aceitar ingredientes repetidos, porém está aceitando. Alguém sabe me explicar o que está errado? Obrigado.

<meta charset="UTF-8">

<h1>Receitas do Yan</h1>

<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 achou = false;

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

             if (ingredientes[contador] == ingrediente){

                achou = true;
                break;    
                }
        }

           if (achou == false){

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

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

Alexandre, uma lista começa com o índice zero.

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

             if (ingredientes[contador] == ingrediente){
        //o indice está sempre com uma posição a mais da lista 
                achou = true;
                break;    
                }
        }

Seu contador inicia com 1, então você ta sempre comparando um índice da lista que não foi adicionado. Você tem que começar a fazer com o índice zero, então o certo seria usar a posição.

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

             if (ingredientes[posicao] == ingrediente){  //aqui

                achou = true;
                break;    
                }
        }