Imagine o array como uma lista de compras. Quando você lembra de algo que precisa comprar e vai anotar na lista, inconscientemente você verifica produto a produto da lista, se você ver que já tinha anotado, descarta a tarefa e não anota mais, se ainda não tinha anotado você anota ele no final. O compilador não é tão avançado quanto nosso cérebro e precisa ser ajustado para fazer esse processo que fazemos inconscientemente.
O instrutor montou mais ou menos essa rotina:
<script>
var ingredientes = [];
var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));
var contador = 1;
// Este loop é responsável por ir adicionando todos os "produtos" na nossa lista
while( contador <= quantidade) {
var ingrediente = prompt("Informe o ingrediente " + contador);
var existe = false; // Essa variável vai nos ajudar a controlar quando algo já foi adicionado na nossa lista
// Este loop vai percorrer nossa lista atual, produto a produto, para ver se já marcamos ele
for( var posicao = 0; posicao < ingredientes.length; posicao++) {
// Aqui é a condicional que nos permite saber se já marcamos o produto
// vamos verificar se o 1º produto marcado é igual ao que queremos marcar
// depois o 2º produto marcado, aí o 3º, até acabar a lista de produtos marcados
if( ingredientes[posicao] == ingrediente) {
existe = true; //Caso a gente já tenha marcado, vamos ajustar aqui para não adicionar
// o produto repetido no if ali embaixo
break; // Aqui é para pararmos de conferir no resto da lista se o produto
// já foi marcado na lista
}
}
// Só adicionamos na nossa lista se ele ainda não tiver sido marcado
if( existe == false) {
ingredientes.push(ingrediente);
contador++;
}
}
console.log(ingredientes);
</script>
Bom, não sei se ajudei ou se atrapalhei mais. Qualquer dúvida é só falar hehe