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 = '';
}