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

[Bug] A validação do nome repetido não está funcionando.

No meu código o método .includes não está realizando a checagem. Já mexi nele e nada de mudar. Vou colocar todo o código aqui. Se alguém puder me explicar onde está o erro e como conserta-lo eu agradeço.

let listaNomes = [];

function adicionar() {
  let nome = document.getElementById("nome-amigo").value;
  //esse If está verificando se o campo nome está vazio, se isso ocorrer ele não deixa adicionar na lista valores em branco.
  if (nome == "") {
    alert("Nome não informado!")
    return;
  }
// Verificar se o nome já está na lista.
  if (listaNomes.includes(nome)){
    alert("Nome já adicionado!")
    return;
  }
  listaNomes.push(" " + nome);
  document.getElementById("lista-amigos").textContent = listaNomes;
  document.getElementById("nome-amigo").value = "";
  console.log(listaNomes)
  
}
function sortear() {
  if (listaNomes.length < 4) {
    alert("Adicione pelo menos quatro amigos")
  } else {
     embaralha(listaNomes);
    let listaSorteio = document.getElementById("lista-sorteio");

    for (let i = 0; i < listaNomes.length; i++) {
      if (i == listaNomes.length - 1) {
        listaSorteio.innerHTML =
          listaSorteio.innerHTML +
          listaNomes[i] +
          "-->" +
          listaNomes[0] +
          "<br>";
      } else {
        listaSorteio.innerHTML =
          listaSorteio.innerHTML +
          listaNomes[i] +
          "-->" +
          listaNomes[i + 1] +
          "<br>";
      }
    }
    console.log(listaNomes);
  }
}

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() {
  listaNomes = [];
  listaSorteio = "";
  document.getElementById("lista-amigos").innerHTML = listaNomes;
  document.getElementById("lista-sorteio").innerHTML = listaSorteio;
}

Obrigado

2 respostas
solução!

Oi!

Acho que o problema está na hora de você incluir um registro no array:

listaNomes.push(" " + nome);

Está sendo incluído o nome com um espaço em branco, então ao chamar o includes não vai encontrar mesmo:

if (listaNomes.includes(nome)) {

Altere esse if para ter um espaço em branco também:

if (listaNomes.includes(" " + nome)) {

E veja se resolve.

Bom dia Rodrigo!

Obrigado pela resposta. Faz todo o sentido a tua resposta. Testei aqui como você sugeriu e agora funcionou.

Eu fiz o "listaNomes.push(" " + nome);" com o espaço porque quando ele imprime no Amigos incluídos não tem espaço entre o nome e a vírgula.

E o teu esclarecimento foi bom. Porque o que o Javascript vai interpretar é " Nome" e não "Nome". Verifiquei no console.log e o espeço aparece lá. Ficarei mais atento com isso.

Muito obrigado!