Oi!
Parabéns pela resolução do desafio, Beatriz! Seu código demonstra um ótimo cuidado com a experiência de uso, especialmente ao implementar validações para garantir que apenas nomes válidos sejam inseridos e evitar duplicatas.
A lógica de sorteio utilizando o embaralhamento (algoritmo de Fisher-Yates) aliado à conexão do último elemento com o primeiro é a maneira mais segura de garantir que todos tirem alguém e que o ciclo se feche.
Pontos Positivos da sua Implementação
- Validação com regex: O uso de
/^[A-Za-zÀ-ÿ\s]+$/ é excelente. Ele garante que números ou caracteres especiais não entrem na lista, aceitando inclusive acentuação, o que é fundamental para nomes brasileiros. - Tratamento de duplicatas: Converter o nome para
toUpperCase() antes de verificar com includes evita que o sistema aceite "Beatriz" e "beatriz" como pessoas diferentes, o que causaria confusão no sorteio. - Cópia do array: Ao usar
[...listaAmigos], você cria uma cópia da lista original para embaralhar. Isso é uma boa prática para manter os dados originais intactos caso precise deles depois.
Ajustes importantes no Código
Notei alguns pequenos detalhes de sintaxe que podem impedir o código de rodar corretamente. Vamos ajustá-los:
- Erro de aspas e variável: Na linha do
if('listaAmigos.includes(receberNomes){, há uma aspa sobrando no início e a variável correta é receberNome (no singular). - Fechamento de chaves: O bloco do
if que verifica nomes duplicados precisa ser fechado corretamente antes de adicionar o nome ao array.
Veja como ficaria esse trecho corrigido:
if(apenasLetras.test(receberNome)){
// Verificando duplicidade corretamente
if(listaAmigos.includes(receberNome)){
alert('Esse nome já existe, por favor, escolha outro (EX: sobrenome)');
return;
}
listaAmigos.push(receberNome);
amigosIncluidos.textContent = listaAmigos.join(', ');
document.getElementById('nome-amigo').value = '';
} else {
alert('Por favor, escreva um nome válido apenas com letras');
}
Dica de lógica
No seu sorteio, você definiu o mínimo de 3 pessoas. Isso é interessante porque evita que o sorteio fique óbvio demais (em 2 pessoas, um necessariamente tiraria o outro).
A estrutura que você criou para o laço for está perfeita para criar o efeito de "corrente", onde cada pessoa tira a próxima da lista embaralhada e a última fecha o ciclo com a primeira.
Continue praticando essa organização de funções, pois separar a lógica de adicionar, sortear e reiniciar deixa o sistema muito fácil de entender e manter. Já pensou em adicionar um botão para remover um nome específico caso alguém desista da brincadeira?
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!