[RESOLVIDO] Programa trava após executar um alert ()

Olá, pessoas.

To com um problema nesse exercício. Esse programa deve receber os itens de uma receita digitados por usuário, salva-los dentro de um vetor, sempre verificando se o item digitado já não consta. Caso conste, deve exibir um alert() informando ao usuário que dado item já foi computado anteriormente, senão, deve gravar o item no vetor e repetir esse ciclo até a quantidade de ingredientes total ser saciada. Abaixo deixo o código.

	<script>

	//Vetor que guarda os itens.
    var ingredientes = [];

    //Variável que guarda quantos itens serão adicionados no vetor ingredientes.
    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));

    //Variável de verificação.
    var verifica = true;

    //Laço para guardar os itens s no vetor.
    for (var contador1 = 1; contador1 <= quantidade; contador1++){
        var item = prompt("Informe o "+contador1+"º item: ");

        /*Laço que verifica se o item digitado já existe ou não no vetor ingredientes. Caso exista, exibe alerta e muda o valor da variável de verificação para false.*/

        for (var contador2 = 0; contador2 < ingredientes.length || verifica != true; contador2++){
	        if (item == ingredientes[contador2]) {
	        	alert("Item já adicionado!");
	        	verifica = false;
	        }
	    }

	    //Condicional que quarda o item digitado na primeira iteração.
	    if (contador1 == 1 && verifica == true){
	    	ingredientes.push(item);
	    }

	    //Condicional que guarda o item após a primeira iteração e caso ele não seja repetido.
	    if (contador1 != 1 && verifica == true){
	    	ingredientes.push(item);
	    }

	    //Condicional decrementa a variável contador1, caso o item digitado seja repetido e após a primeira iteração. 
	    if (contador1 != 1 && verifica == false) {
	    	contador1--;
	    	verifica = true;
	    }
 	}

   console.log(ingredientes);
   
</script>

Ok, mas explique melhor o problema, n oq deve acontecer.
Vc sabe que quando um alert é exibido tudo pára até ele ser fechado, né?

Sim, eu sei.

O problema é que quando o usuário digita um valor que já existe no vetor ingredientes [ ] e o alert( ) do segundo for é exibido, após fechá-lo, o programa não dá continuidade, ou seja, no meu entender, deveria atribuir o valor false para variável verifica, com isso sair do segundo for, em seguida, ler a terceira condição:

//Condicional decrementa a variável contador1, caso o item digitado seja repetido e após a primeira iteração. 
	    if (contador1 != 1 && verifica == false) {
	    	contador1--;
	    	verifica = true;
	    }

Depois disso, novamente seguir com o primeiro for e assim sucessivamente até contador1<= quantidade retornar verdadeiro.

O código está bem confuso, mas considerando o que fez, debugando não achou o ponto que está fora do esperado?

Como eu faço isso? Realmente, sou total noob nisso aqui.
Eu sei abrir o Inspector do Google Chrome, mas não há nada no console. Tem alguma outra ferramenta?

Na aba Sources. Pra mais detalhes pesquise no google como debugar com o Chome.

Ok, consegui resolver. O problema situava-se na minha lógica mesmo. Poderia ser feito de forma bem mais simples e sem necessidade de tantos if(s).

Cheguei no seguinte código.

<script>

	//Vetor que guarda os itens.
    var ingredientes = [];

    //Variável que guarda quantos itens serão adicionados no vetor ingredientes.
    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));

    //Laço para guardar os itens s no vetor.
    for (var contador1 = 1; contador1 <= quantidade; contador1++){
        var item = prompt("Informe o "+contador1+"º item: ");

        //Variável de verificação.
        var verifica = true;

        /*Laço que verifica se o item digitado já existe ou não no vetor ingredientes. Caso exista, exibe alerta e muda o valor da variável verifica para false.*/
        for (var contador2 = 0; contador2 < ingredientes.length; contador2++){
	        if (item == ingredientes[contador2]) {
	        	alert("Item já adicionado!");
	        	verifica = false;
	        	contador1--;
	        	break;
	        }
	    }

	    if (verifica == true){
	    	ingredientes.push(item);
	    }
	}
	    
   console.log(ingredientes);

</script>

Ao invés de break poderia usar return, assim elimina o segundo if.

1 curtida