1
resposta

Opção um pouco diferente do apresentado.

Optei por adotar o algoritmo de Fisher-Yates depois de ter tentado algumas opções como ''.sort()";
Também achei importante a adição do toLowerCase para evitar que, rodrigo e Rodrigo, fossem diferentes na hora de ir pro array, evitando um futuro bug na hora do sorteio.

segue meu código:

let listaDeAmigos = [];

function adicionar() {
    let nomeDoAmigo = document.getElementById('nome-amigo').value.trim();
    //usei o .trim() para remover possívei espaços extras no início/fim do nome.

        //use o espaçamento (ensinado nas primeiras aulas) para destacar as condições que garantem um melhor funcionamento do código.
        if (nomeDoAmigo === '') {
            alert('Insira um nome no campo "Nome do amigo"');
            return;
        }

        //Pesquisando, achei essa opção mais acertiva do que o ".includes" por dessa forma ignorar maiúsculas/minúsculas.
        if (listaDeAmigos.some(amigo => amigo.toLowerCase() === nomeDoAmigo.toLowerCase())) {
            alert('Você já adicionou esse amigo.');
            document.getElementById('nome-amigo').value = '';
            return;
        }
    

    listaDeAmigos.push(nomeDoAmigo);
    mostrarLista();
    document.getElementById('nome-amigo').value = '';
}


function mostrarLista() {
    let minhaString = listaDeAmigos.join(', ');
    let localDaLista = document.getElementById('lista-amigos');
    localDaLista.textContent = minhaString;
    console.log(minhaString);
}


function reiniciar() {
    listaDeAmigos = [];
    document.getElementById('lista-amigos').textContent = '';
    document.getElementById('lista-sorteio').textContent = '';
    document.getElementById('nome-amigo').value = '';
}


function sortear() {
    if (listaDeAmigos.length < 4) {
        alert('É necessário pelo menos 4 amigos para realizar o sorteio.');
        return;
    }
    
    embaralha(listaDeAmigos);
    let sorteados = document.getElementById('lista-sorteio');
    
    for (let i = 0; i < listaDeAmigos.length; i++) {
        if (i == listaDeAmigos.length - 1) {
            sorteados.innerHTML = sorteados.innerHTML + listaDeAmigos[i] + ' → ' + listaDeAmigos[0] + '<br>';
    } else {
            sorteados.innerHTML = sorteados.innerHTML + listaDeAmigos[i] + ' → ' + listaDeAmigos[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]];
    }
}
1 resposta

Bom dia! Como está?

Incrível! Continue resolvendo os desafios e compartilhando com a comunidade Alura.

Notei que você utilizou o .trim() para garantir entradas limpas e confiáveis, aplicou de forma eficaz o .some() com toLowerCase() para evitar duplicatas ignorando maiúsculas/minúsculas e compreendeu a importância do destructuring para tornar o embaralhamento mais elegante e eficiente.

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!