2
respostas

Dúvidas sobre array.

Olá boa tarde. Gostaria de saber se o meu código está bom ou se tem algo que posso melhorar. Ainda estou com um pouco de dúvidas em relação ao array.

<meta charset="UTF-8">

<h1>Receitas do Yan</h1>

<script>
    var ingredientes = [];
    var quantidade = parseInt(prompt("Quantos ingredientes você vai adicionar?"));
    var contador = 1;
    var igual;

    while( contador <= quantidade) {
        igual = false;
        var ingrediente = prompt("Informe o ingrediente " + contador);

        for(var posicao = 0; posicao <= ingredientes.length; posicao++){
            if(ingrediente == ingredientes[posicao]){
                igual = true;
                break;
            }
        }
        if(igual == false){
            ingredientes.push(ingrediente);
            contador++;

        }

        contador++;
    }
    document.write(ingredientes);

</script>
2 respostas

Boa tarde man, é um código de boa. Algo que posso te passar do que conheço sobre usar arrays é: Use comparações X == FALSE para grandes velumes e X == TRUE para pequenos volumes de dados. parece bobo, mas faz uma diferença de performance. Quando for usar um FOR com var.length, procure fazer assim:

let len =  ingredientes.length
(var posicao = 0; posicao <= len; posicao++)

Por que quando você usa o var.length direto no FOR ele vai ficar se auto contando toda hora. Já aconteceu comigo de travar um sistema aqui. rsrs, mudei isso e ficou bom!

Preferencialmente eu gosto de usar um FOREACH ou FOR dentro de FOR se necessário do que um WHILE. Já fiz alguns testes e ficou bom o FOR reverso, que você pode testar aqui: https://jsperf.com/ FOR reverso é quando você ao invés de contar de 0 a X, você conta de X até 0. Não vi nada até hoje que seja melhor que isso em questão de entregar mais rápido um resultado em lista repetida.

Oi Édipo de Oliveira Sampaio Porto tem alguns erros de lógica, se rodarmos o seu código do jeito que está quando colocamos 2 ingredientes ele nos pede um e termina abruptamente.

Você não deve incrementar o contador fora do if, o nosso contador só será incrementado caso o ingrediente não exista, ou quando ele for false, retire essa linha e tudo vai funcionar como esperado.

 }

        contador++; // Código incrementando duas vezes em um loop
    }
    document.write(ingredientes);

Espero ter ajudado e bons estudos.