1
resposta

IF não deixa passar nenhum nome

Pessoal, estou com um problema, eu havia feito os desafios antes de assisitir as resoluções, os dois primeiros funcionaram perfeitamente, e foram exatamente como os videos da resolução mostraram, porém, no ultimo, onde ele verifica se o nome digitado já está na lista, para impedir um nome repetido, não estava funcionando, e deixei para ver agora na resolução, que também está igual ao que eu tinha feito, porém mesmo assim o meu não funciona e eu não consigo entender o porque, alguém consegue me ajudar a achar onde está o erro? Segue o código:

let amigos = [];

function adicionar() {
    let amigo = document.getElementById('nome-amigo');
    let lista = document.getElementById('lista-amigos');

    amigos.push(amigo.value);

    if(amigo.value == '' || amigo.value == ' ') {
        alert('Insira um nome válido!');
        amigo.value = '';
        return;
    }


    if(amigos.includes(amigo.value)) {        
        alert('Nome já adicionado, adicione um nome diferente.');
        return;
    }
    

    amigo.value = '';
}

function sortear() {

    if(amigos.length < 4){
        alert('Insira no mínimo 4 nomes!');
        return;
    }
    embaralha(amigos);
    let sorteio = document.getElementById('lista-sorteio');

    for (let i = 0; i < amigos.length; i++) {
        if (i == amigos.length - 1) {
            sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[0] + '<br>';
        } else {
            sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[i + 1] + '<br>';
            }
    }
}

function embaralha(lista) {

    for (let indice = lista.length; indice; indice--) {

        const indiceAleatorio = Math.floor(Math.random() * indice);

        // atribuição via destructuring
        [lista[indice - 1], lista[indiceAleatorio]] = 
            [lista[indiceAleatorio], lista[indice - 1]];
    }
}

function reiniciar() {
    amigos = [];
    document.getElementById('lista-amigos').innerHTML = '';
    document.getElementById('lista-sorteio').innerHTML = '';
}
1 resposta

Oi!

O problema está nesse trecho do seu código:

amigos.push(amigo.value);

if(amigo.value == '' || amigo.value == ' ') {
    alert('Insira um nome válido!');
    amigo.value = '';
    return;
}


if(amigos.includes(amigo.value)) {        
    alert('Nome já adicionado, adicione um nome diferente.');
    return;
}

A primeira linha (amigos.push(amigo.value);) deve ficar depois dos dois ifs, senão o amigo será adicionado na lista antes de serem feitas as validações:

if(amigo.value == '' || amigo.value == ' ') {
    alert('Insira um nome válido!');
    amigo.value = '';
    return;
}


if(amigos.includes(amigo.value)) {        
    alert('Nome já adicionado, adicione um nome diferente.');
    return;
}

amigos.push(amigo.value);