1
resposta

[Sugestão] Projeto Amigo Secreto - Resolução Final

Segue meu código final com todos os complementos:

let amigos = [];

function removerDuplicatas(array) {
    return [...new Set(array)];
}

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

    if (amigo.value.trim() === '') {
        alert('Informe o nome do Amigo!');
        return;
    }

    const nomeMinusculo = amigo.value.toLowerCase();

    if (amigos.some(nomeNaLista => nomeNaLista.toLowerCase() === nomeMinusculo)) {
        alert('Este nome já foi incluído!');
        amigo.value = '';
        return;
    }

    amigos.push(amigo.value);
    amigos = removerDuplicatas(amigos);

    amigo.value = '';
    atualizarLista();
}

function atualizarLista() {
    let lista = document.getElementById('lista-amigos');
    lista.innerHTML = '';
    amigos.forEach(amigo => {
        const item = document.createElement('div');
        item.textContent = amigo;
        lista.appendChild(item);
    });
}

function embaralhar(array) {
    // Implementação da função de embaralhar (Fisher-Yates)
    for (let i = array.length - 1; i > 0; i--) {
        const j = Math.floor(Math.random() * (i + 1));
        [array[i], array[j]] = [array[j], array[i]];
    }
}

function sortear() {
    if (amigos.length < 4) {
        alert('ADICIONE PELO MENOS 4 AMIGOS!');
        return;
    }

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

    for (let i = 0; i < amigos.length; i++) {
        const linha = document.createElement('div');
        const proximo = i === amigos.length - 1 ? 0 : i + 1;
        linha.textContent = `${amigos[i]} → ${amigos[proximo]}`;
        sorteio.appendChild(linha);
    }
    alert("Perfeito, esta é a lista dos amigos secretos!");
}

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

Olá, Paulo. 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ê usou a função removerDuplicatas com o Set para evitar nomes repetidos na lista. Isso deixa seu código mais limpo. Além disso, a implementação do algoritmo de embaralhamento Fisher-Yates foi uma excelente escolha para garantir um sorteio justo.

Uma dica interessante: você pode usar o método toLocaleUpperCase() para garantir que os nomes sejam armazenados sempre em maiúsculas, evitando comparações inconsistentes. Veja este exemplo:


function formatarNome(nome) {
    return nome.trim().toLocaleUpperCase();
}

Isso ajuda a manter um padrão na lista de amigos.

Conte com o apoio do Fórum. Abraços e bons estudos.