Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Projeto] Minha solução e feedback

A minha solução foi a seguinte: eu acabei utilizando duas arrays, embaralhando elas e colocando uma ao lado da outra no "sorteado" Está adequado a solução? seria pouco viável por utilizar duas arrays? eu entendo que o foco não é tornar o código enxuto agora e sim conseguir desenvolver uma lógica, mas eu aceito feedbacks e agradeço desde já ! (eu também encontrei essa forma de embaralhar a array na net, a minha unica cola foi um pouquim de gpt (para saber os métodos de manipulações de array))"

let peoplelist = [];
let peopleListSort = [];
function adicionar() {
  addPeople = document.getElementById("nome-amigo").value;
  peoplelist.push(addPeople);
  peopleListSort = [...peoplelist];
  updateFriendsList();
}

function updateFriendsList() {
  let lista = document.getElementById("lista-amigos");
  lista.innerHTML = "";

  peoplelist.forEach((addPeople) => {
    lista.innerHTML += `<p id="lista-amigos">${addPeople}</p>`;
  });
}

function sortear() {
  embaralharArray(peoplelist);
  embaralharArray(peopleListSort);

  let sorteio = document.getElementById("lista-sorteio");
  sorteio.innerHTML = "";

  peoplelist.forEach((addPeople, i) => {
    sorteio.innerHTML += `<p id="lista-sorteio">${addPeople} -> ${peopleListSort[i]}</p>`;
  });

  console.log(peoplelist, peopleListSort);
}

function embaralharArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    const j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
}
1 resposta
solução!

Olá Robert, tudo bem? Espero que sim!

Sua solução está adequada e viável. O uso de duas arrays é uma abordagem válida para embaralhar e exibir os resultados. O foco principal é desenvolver a lógica e você conseguiu fazer isso.

No entanto, notei que você está tendo um problema ao sortear o último elemento da array, pois não há um próximo elemento para ser sorteado. Para resolver isso, você pode adicionar uma verificação no seu código para tratar esse caso específico.

No trecho de código da função sortear(), você pode adicionar um if para verificar se o índice i é igual ao tamanho da array amigos menos 1. Se essa condição for verdadeira, significa que é o último elemento e você pode fazer com que ele sorteie o primeiro elemento da array. Ficaria assim:

for (let i = 0; i < amigos.length; i++) {
  if (i == amigos.length - 1) {
    sorteio.innerHTML += `<p id="lista-sorteio">${amigos[i]} -> ${amigos[0]}</p>`;
  } else {
    sorteio.innerHTML += `<p id="lista-sorteio">${amigos[i]} -> ${amigos[i + 1]}</p>`;
  }
}

Dessa forma, quando o último elemento for sorteado, ele irá sortear o primeiro elemento da array.

Caso tenha dúvidas, fico à disposição.

Bons estudos!