3
respostas

Não entendi como faz esta atividade.

Na aula 09 (Trabalhe com muitos dados) tem a seguinte atividade:

Yan teve a ideia de criar um programa para criar receitas. Nele, há uma lista no qual o usuário pode adicionar ingredientes. Vamos observar:

<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);

        ingredientes.push(ingrediente);

        contador++;
    }

    console.log(ingredientes);
</script>

Ao testar o código, verificamos que ele funciona! O problema é que podemos adicionar na lista de uma receita ingredientes repetidos. Altere o código para que os ingredientes repetidos não possam ser adicionados. Você encontra o gabarito facilmente, mas tente primeiro resolver o exercício.

Porém, eu não entendi como posso fazer para que não tenha ingredientes repetidos.

3 respostas

Bom, não vou te dar a resposta pronta, mas pensa comigo: Eu estou adicionando ingredientes na minha receita, e a cada ingrediente que eu coloco, ele adiciona lá no meu array chamado ingredientes (através do push). Então, o que você pode fazer é verificar, antes de fazer o push pro array, se o ingrediente que o usuário digitou já não existe no array. No array, existe um método chamado includes, onde você passa um valor como parâmetro, e ele verifica e retorna verdadeiro se este valor já existe no array, ou falso caso não exista. Você pode utilizar isto em conjunto com um if por exemplo, e se ele retornar verdadeiro (ou seja, quer dizer que o ingrediente já existe na lista), então mostre uma mensagem de erro no console.

Tenta pesquisar sobre o includes e ver como implementa-lo, e tente fazer, qualquer coisa, se não der certo, comenta aqui o código como ficou após a alteração que nós te ajudamos. Abraço.

Poderia explicar passo a passo como posso fazer isso sem dar a resposta ?

Existem algumas opções de como fazer isso, vou postar uma aqui.

Abaixo da linha ingredientes.push(ingrediente);, você pode fazer o seguinte:

var ingredienteExiste = ingredientes.includes(ingrediente) que significa : Cria uma variavel chamada ingredienteExiste, e ela vai verificar se o ingrediente que o usuário digitou já existe dentro do array ingredientes. Caso exista, a variável ingredienteExiste = verdadeiro, e caso não exista, vai ser falso.

Agora você pode fazer um if (ingredienteExiste) { ingredientes.pop() } que significa: Se a variavel ingredienteExiste for verdadeira, ou seja, se o ingrediente já existe na lista, então lá no array, remova o último item adicionado, que no caso, foi o item repetido que você adicionou, já que você está adicionando tudo isto depois de ele fazer o push.

Dessa forma que fizemos, posso descrever da seguinte forma: Primeiro, eu adiciono o ingrediente que o usuário digitar na minha lista, mesmo que este ingrediente seja repetido, e já esteja lá na lista. Depois eu faço a verificação deste ingrediente, se ele está repetido dentro da lista, e se estiver, eu removo ele. Quando eu faço o push, ele sempre adiciona o item ao final do array, e é por isso que eu utilizo o pop, para ele remover o último item da lista, caso esteja repetido.

Espero ter ajudado. Não se preocupe em fazer o programa rodar, tente entender o que está sendo feito em cada linha. Se ficou alguma dúvida pode comentar aqui.