1
resposta

[Projeto] [Projeto] Amigo Secreto

Esse projeto foi o mais complexo até aqui, demorei 3 dias para finalizar a lógica. O mais difícil considerando como resolvi, foi impedir que o "amigo secreto" pegasse seu próprio nome. Ao final desse pequeno projeto estou bem satisfeito com o resultado, o tempo gasto quebrando cabeça me ensinou muito. Algo que pretendo melhorar futuramente é quanto a utilização excessiva de condicionais, esse fato pode ser visto na função Sortear(). E evitar redundâncias.

Segue o código:

//nomes adicionados
let listaNomesParticipantes = [];
//nomes sorteados e adicionados em ordem. [0] + sorteio, [1] + sorteio...
let listaNomesSorteado = [];
//escrever o nome e salvar na lista e mostrar na tela
function adicionar() {
    let nomeEscrito = document.getElementById('nome-amigo').value;
    let localNomesVisiveis = document.getElementById('lista-amigos');
    if (nomeEscrito == '') {
        alert('Digite um nome válido.')
    } 
    else {
        listaNomesParticipantes.push(nomeEscrito);
        localNomesVisiveis.textContent = listaNomesParticipantes;
    }
    console.log(listaNomesParticipantes)
    let limpar = document.querySelector('input');
    limpar.value = '';
   
}



//pegar os nomes salvos na lista e sortear entre eles, onde um nome nao deve ficar com ele mesmo.
function sortear() {
    document.getElementById('lista-sorteio').textContent = '';
    listaNomesSorteado = [];
    if (listaNomesParticipantes.length < 3) {
        alert('Você precisa de ao menos 3 nomes para realizar o sorteio')
    } 
    else {
        let mostrarSorteio = document.getElementById('lista-sorteio');
        let listaNomesPartiDinamica = Array.from(listaNomesParticipantes);
        function criarNumeroAleatorio() {
        return numeroAleatorio = parseInt(Math.random() * listaNomesPartiDinamica.length);                  
        }

        for (let i = 0; i < listaNomesParticipantes.length; i++) {
            let numero = criarNumeroAleatorio();
            if (listaNomesPartiDinamica.length === 2) {
                let arranjo = listaNomesParticipantes[i] == listaNomesPartiDinamica[0] ? listaNomesPartiDinamica[1] : listaNomesPartiDinamica[0];
                if (listaNomesPartiDinamica.includes(listaNomesParticipantes[i])) {
                    arranjo = listaNomesParticipantes[i] == listaNomesPartiDinamica[0] ? listaNomesPartiDinamica[1] : listaNomesPartiDinamica[0];
                    listaNomesSorteado.push(`<span>${listaNomesParticipantes[i]} --> ${arranjo}</span>`);
                    listaNomesPartiDinamica.splice(listaNomesPartiDinamica.indexOf(arranjo), 1);
                    listaNomesSorteado.push(`<span>${listaNomesParticipantes[i+1]} --> ${listaNomesPartiDinamica[0]}</span>`);
                }
                else if (listaNomesPartiDinamica.includes(listaNomesParticipantes[i+1])) {
                    arranjo = listaNomesParticipantes[i+1] == listaNomesPartiDinamica[0] ? listaNomesPartiDinamica[1] : listaNomesPartiDinamica[0];
                    listaNomesSorteado.push(`<span>${listaNomesParticipantes[i+1]} --> ${arranjo}</span>`);
                    listaNomesPartiDinamica.splice(listaNomesPartiDinamica.indexOf(arranjo), 1);
                    listaNomesSorteado.push(`<span>${listaNomesParticipantes[i]} --> ${listaNomesPartiDinamica[0]}</span>`);
                }
                else {
                listaNomesSorteado.push(`<span>${listaNomesParticipantes[i]} --> ${arranjo}</span>`);
                listaNomesPartiDinamica.splice(listaNomesPartiDinamica.indexOf(arranjo), 1);
                listaNomesSorteado.push(`<span>${listaNomesParticipantes[i+1]} --> ${listaNomesPartiDinamica[0]}</span>`);
                }
                i = listaNomesParticipantes.length+1
                
            }
            else {
                while (listaNomesPartiDinamica[numero] === listaNomesParticipantes[i]) {
                numero = criarNumeroAleatorio();
                }
                listaNomesSorteado.push(`<span>${listaNomesParticipantes[i]} --> ${listaNomesPartiDinamica[numero]}</span>`);
                listaNomesPartiDinamica.splice(numero,1); 
                
            }
            
        }
        listaNomesPartiDinamica = '';
        mostrarSorteio.innerHTML = listaNomesSorteado.join('<br/>'); 

    }
                  
}    

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

Bom dia, Guilherme! Como está?

Se projeto ficou incrível! É muito bom ver que conseguimos realizar um desafio que no início parecia muito difícil.

Notei que você utilizou arrays para manipulação dinâmica de listas, aplicou de forma eficaz o método splice para remover elementos da lista e compreendeu a importância do controle de fluxo com condicionais e loops para garantir a lógica correta no sorteio.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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