Falta pouco!

0 dias

0 horas

0 min

0 seg

Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Bug] A função sortear não está funcionando corretamente

Eu não sei o que está errado, mas toda vez que coloco para sortear, fica tudo como undefined.

let amigos = [];

function adicionar(){
    let amigo = document.getElementById('nome-amigo');
    let lista = document.getElementById('lista-amigos');
    amigos.push(amigos.value)
    if (lista.textContent == ''){
        lista.textContent = amigo.value;
    } else {
        lista.textContent = lista.textContent + ', ' + amigo.value;
    }
 amigo.value = '';   
}

//código omitido

function sortear() {
    embaralha(amigos);
    let sorteio = document.getElementById('lista-sorteio');

    //código omitido

for (let i = 0; i < amigos.length; i++) {
    if (i == amigos.length - 1) {
        sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[0] + '<br>';
    } else {
        sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[i + 1] + '<br>';
        }
}

}   

//código omitido

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]];
    }
}

function reiniciar() {
   amigos = [];
    document.getElementById('lista-amigos').innerHTML = '';
    document.getElementById('lista-sorteio').innerHTML = '';
}
2 respostas
solução!

Oi Iasmin! Tudo bem?

Primeiro, ao adicionar amigos à lista, você está usando amigos.push(amigos.value), mas deveria ser amigos.push(amigo.value), pois amigo é o elemento que contém o valor que você deseja adicionar à lista.

Aqui está o trecho corrigido da função adicionar:

function adicionar(){
    let amigo = document.getElementById('nome-amigo');
    let lista = document.getElementById('lista-amigos');
    amigos.push(amigo.value); // Corrigido para amigo.value
    if (lista.textContent == ''){
        lista.textContent = amigo.value;
    } else {
        lista.textContent = lista.textContent + ', ' + amigo.value;
    }
    amigo.value = '';   
}

Agora, sobre a função sortear, parece que você já implementou a lógica correta para lidar com o último elemento sorteando o primeiro. No entanto, é importante garantir que o array amigos esteja sendo preenchido corretamente, o que a correção acima deve ajudar a resolver.

Após fazer essa correção, teste novamente a função de sorteio para ver se o problema foi resolvido. Se ainda houver problemas, verifique se o array amigos está sendo atualizado corretamente antes de chamar a função sortear.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.

Muito obrigada! Deu certo!