Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Desafio amigo secreto - versao final

Segue o codigo completo agora, corrigido. Eu vi a sugestões que me passaram, guardei elas, mas quis deixar o codigo como eu tinha montado.. mas entendi as referencias que me passaram

let grupoAmigos = [];

    function adicionar() {
        let nomeAmigo = document.getElementById('nome-amigo').value.trim();
        let listaAmigos = document.getElementById('lista-amigos');
        let nomeAmigoUpper = nomeAmigo.toUpperCase();
    
        if (nomeAmigo === '') {
            alert('Favor inserir o nome no campo');
            return;
        }
    
        if (grupoAmigos.includes(nomeAmigoUpper)) {
            alert("Amigo já incluído, informe outro nome ou adicione um sobrenome");
            return;
        }
    
        grupoAmigos.push(nomeAmigoUpper);
        console.log(grupoAmigos);
    
        atualizarLista();
    
        document.getElementById('nome-amigo').value = ''; 
    }     

function sortear() {

    if (grupoAmigos.length < 4) {
        alert('Adicione pelo menos Quatro amigos para realizar o sorteio.');
        return;
    }

    embaralhar(grupoAmigos);
    let listaSorteio = document.getElementById('lista-sorteio');
    listaSorteio.innerHTML = '';

    for (let i = 0; i < grupoAmigos.length; i++) {
        let amigo1 = grupoAmigos[i];
        let amigo2 = (i === grupoAmigos.length - 1) ? grupoAmigos[0] : grupoAmigos[i + 1];
        listaSorteio.innerHTML += `${amigo1} → ${amigo2} <br>`;
    }
}

function excluirAmigo(index) {
    grupoAmigos.splice(index, 1);
    atualizarLista();
    atualizarSorteio();
}

function embaralhar(lista) {
    for (let indice = lista.length; indice; indice--) {
        let indiceAleatorio = Math.floor(Math.random() * indice);

        [lista[indice - 1], lista[indiceAleatorio]] = [lista[indiceAleatorio], lista[indice - 1]];
    }
}

function atualizarSorteio() {
    listaSorteio = document.getElementById('lista-sorteio');
    listaSorteio.innerHTML = '';

}

function atualizarLista() {
    let listaAmigos = document.getElementById('lista-amigos');
    listaAmigos.innerHTML = ''; 

    for (let i = 0; i < grupoAmigos.length; i++) {
        let paragrafo = document.createElement('p');
        paragrafo.textContent = grupoAmigos[i];

        paragrafo.addEventListener('click', function() {
            excluirAmigo(i);
        });

        listaAmigos.appendChild(paragrafo);
    }
}


function reiniciar() {
    grupoAmigos = [];
    document.getElementById('lista-amigos').innerHTML = '';
    document.getElementById('lista-sorteio').innerHTML = '';
}
1 resposta
solução!

Olá, Rony. Tudo bem?

Muito obrigado por compartilhar o seu código aqui com a gente. Parabéns pelo trabalho. Continue com essa dedicação.

Ótimo como você organizou a lógica para evitar nomes duplicados e garantir que o sorteio aconteça apenas com um número mínimo de participantes. O uso do método includes para verificar nomes repetidos foi uma boa escolha.

Uma melhoria interessante seria simplificar a função de embaralhar usando sort com um comparador aleatório. Veja este exemplo:


function embaralhar(lista) {
    lista.sort(() => Math.random() - 0.5);
}

Isso faz a mesma função de forma mais concisa.

  Alura   Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!