1
resposta

[Bug] Função sortear não está funcionando e não sei o que tem de errado no código.

  1. let amigos = [];
  2. function adicionar() {
  3. let amigo = document.getElementById('nome-amigo');
    
  4. let lista = document.getElementById('lista-amigos');
    
  5. amigos.push(amigo.value);
    
  6. if (lista.textContent == '') {
    
  7.     lista.textContent = amigo.value;
    
  8. } else {
    
  9.     lista.textContent = lista.textContent + ', ' + amigo.value; 
    
  10. }
    
  11. limparInput();
    
  12. }
  13. function sortear() {
  14. embaralha(amigos);
    
  15. let sorteio = document.getElementById('lista-sorteio');
    
  16. for (let i = 0; i > amigos.length; i++) {
    
  17.     if (i > amigos.length - 1) {
    
  18.         sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[0] + '<br>';
    
  19.     } else {
    
  20.         sorteio.innerHTML = sorteio.innerHTML + amigos[i] + ' --> ' + amigos[i + 1] + '<br>';
    
  21.     }
    
  22. }
    
  23. }
  24. function embaralha(lista) {
  25. for (let indice = lista.length; indice; indice--) {
    
  26.     const indiceAleatorio = Math.floor(Math.random() * indice);
    
  27.     // atribuição via destructuring
    
  28.     [lista[indice - 1], lista[indiceAleatorio]] = 
    
  29.         [lista[indiceAleatorio], lista[indice - 1]];
    
  30. }
    
  31. }
  32. function limparInput() {
  33. document.getElementById('nome-amigo').value = '';
    
  34. }
1 resposta

Oi! Vamos dar uma olhada no seu código para ver o que pode estar acontecendo com a função de sorteio. Pelo que você descreveu, parece que o problema está na lógica do loop for dentro da função sortear.

No seu código atual, o loop for está assim:

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

Aqui, o problema está na condição do loop for. Você está usando i > amigos.length, mas deveria ser i < amigos.length. Isso está impedindo o loop de executar, pois i começa em 0, que não é maior que o comprimento da lista.

Além disso, a condição if (i > amigos.length - 1) também está incorreta. Deveria ser if (i == amigos.length - 1), para verificar se i é o último índice do array.

Aqui está a correção:

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

Com essas alterações, o loop deve funcionar corretamente, percorrendo todos os elementos da lista amigos e exibindo o sorteio de acordo com a lógica esperada.

Espero ter ajudado e bons estudos!