3
respostas

Diferença entre While e For.

De fato há uma diferença, não compreendi bem, mas há. Utilizando o for, mesmo usando o break, não consegui obter o resultado desejado. Com o while, pelo menos à primeira vista, ficou tudo ok. Segue o código para quem quiser testar. Porém repito, passei uma tarde modificando a ordem, if dentro de if etc., e não obtive sucesso com o for. Pelo menos nessa ocasião.

<!DOCTYPE html>
<html lang="pt-br">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Testes Javacript</title>
</head>

<body>
    <h1>Destinos de Viagens válidos</h1>

    <p>Caruaru</p>
    <p>Recife</p>
    <p>Olinda</p>
    <p>Petrolina</p>
    <p>João Pessoa</p>
    <p>Campina Grande</p>

    <p>Resultado no console: Tecle F12 ---></p>

    <div id="container"></div>

    <script src="loops.js"></script>
</body>

</html>

loops.js abaixo

const destinosViagem = new Array (
    `Caruaru`,
    `Recife`,
    `Olinda`,
    `Petrolina`,
    `João Pessoa`,
    `Campina Grande`
);

console.log(destinosViagem);
let localizacao = prompt(`Qual o seu destino?`);
let idadeComprador = prompt(`Qual a sua idade?`);
let i = 0;
    while (i < destinosViagem.length) {
        if (destinosViagem[i] === localizacao && idadeComprador <18) {
            console.log(`Proibido a compra por menores de 18 anos.`);
            let acompanhado = prompt(`Você está acompanhado de um responsável, sim ou não?`);
                if (acompanhado === `sim`) {
                    // console.clear();
                    console.log(`Achei meu destino, siga para`, destinosViagem[i]);
                    break;
                }
                if (acompanhado === `não`) {
                    console.clear();
                    console.log(`Menores só viajam com um responsável!`);
                    break;
                }
        }
        else if (destinosViagem[i] === localizacao && idadeComprador >= 18) {
            console.log(`Achei meu destino, siga para`, destinosViagem[i]);
            break;
        }
        else if (localizacao !== destinosViagem[i]) {
            console.log(`Destino não encontrado`);
            break;
        }
        i++;
    }
3 respostas

Armando, 4 modos de usar o For para te ajudar a tender

const destinosViagem = new Array (
    `Caruaru`,
    `Recife`,
    `Olinda`,
    `Petrolina`,
    `João Pessoa`,
    `Campina Grande`
);

// Usando o For
// Modo 1
for (let destino of destinosViagem) {
  console.log('1',destino);
}
// Modo 2
for ( let i in destinosViagem) {
    console.log('2',destinosViagem[i]);
}
// Modo 3
for (let i = 0; i < destinosViagem.length; i++) {
    console.log('3',destinosViagem[i]);
}
// Modo 4
destinosViagem.forEach(destino => {
    console.log('4',destino);
})

// Usando While
// Modo 5
let i = 0
while( i < destinosViagem.length ) {
    console.log('5',destinosViagem[i]);
    i++;
}

Também é possível fazer sem usar o For ou While

const destinosViagem = new Array (
    `Caruaru`,
    `Recife`,
    `Olinda`,
    `Petrolina`,
    `João Pessoa`,
    `Campina Grande`
);

console.log(destinosViagem);
let localizacao = prompt(`Qual o seu destino?`);
if (destinosViagem.includes(localizacao)) {
   let idadeComprador = prompt(`Qual a sua idade?`);
   if ( idadeComprador < 18) {
      console.log(`Proibido a compra por menores de 18 anos.`);
      let acompanhado = prompt(`Você está acompanhado de um responsável, sim ou não?`);
          if (acompanhado === `sim`) console.log(`Achei meu destino, siga para ${localizacao}`)
          else console.log(`Menores só viajam com um responsável!`);                
   } else console.log(`Achei meu destino, siga para ${localizacao}`);        
} else console.log(`Destino não encontrado`);

Obrigado Luis. Quando me referi ao for, foi que utilizando o mesmo escopo do while, ele imprime outros console.log, mesmo encontrando o que foi procurado. Por isso disse que nao entendi bem o que aconteceu. Com o while ficou correto. De fato, da pra fazer sem usar o for, mas quis praticar com o suporto de nao saber o quer h'a no array, ou objeto, ou at'e mesmo em uma classe. Vou ler um pouco sobre for in e for of, como voc^e bem colocou. Salvo engano, o forEach nao retorna nada, entao nesse caso n~ao sei se seria uma boa usar. Mais uma vez, obrigado.