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

[Bug] não estou conseguindo resgatar nomes

eis meu codigo Insira aqui a descrição dessa imagem para ajudar na acessibilidade

mas olha o que acontece Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá, Jarede!

Aparentemente o problema está na lógica de resgatar o próximo nome do array.

No código fornecido, você está utilizando um loop for para percorrer o array amigos e exibir os nomes no elemento lista-sorteio. Porém, na última iteração do loop, quando o índice i é igual ao tamanho do array, você está tentando acessar o elemento amigos[i + 1], o que está causando o erro de "indefinido".

Para corrigir esse problema, você precisa fazer uma pequena alteração no seu código. No if que verifica se o índice i é igual ao tamanho do array, você deve atribuir o primeiro elemento do array ao próximo nome. Ou seja, em vez de amigos[i + 1], você deve utilizar amigos[0].

Aqui está o trecho de código corrigido:

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 essa alteração, o último elemento do array irá sortear o primeiro elemento corretamente.

Espero que essa solução resolva o seu problema! Se tiver mais alguma dúvida, é só me dizer. Espero ter ajudado e bons estudos!

Pior que não deu certo. Deu na mesma: Insira aqui a descrição dessa imagem para ajudar na acessibilidade

let amigos = [];

function adicionar(){
    let nomeAmigo = document.getElementById('nome-amigo');
    let listaAmigos = document.getElementById('lista-amigos');

    amigos.push(nomeAmigo);

    if (listaAmigos.textContent == '') {
        listaAmigos.textContent = nomeAmigo.value;
    } else {
        listaAmigos.textContent = listaAmigos.textContent + ', ' + nomeAmigo.value;
    }

    nomeAmigo.value = '';

}

function sortear() {
    embaralhar(amigos);

    let sorteio = document.getElementById('lista-sorteio');

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

function embaralhar(lista) {
    for (let indice = lista.length; indice; indice--) {
        const indiceAleatorio = Math.floor(Math.random() * indice);
        [lista[indice - 1], lista[indiceAleatorio]] = [lista[indiceAleatorio], lista[indice - 1]];
    }
}
solução!

Oi!

O problema está nessa sua linha, da função adicionar:

amigos.push(nomeAmigo);

Altere para:

amigos.push(nomeAmigo.value);