1
resposta

Projeto Amigo Secreto - Não consigo escrever um código para evitar duplicidade de nome no Sorteio.

Eu terminei de escrever o código do projeto Amigo secreto. Está tudo certo. Porem os nomes sorteados, algumas vezes se repetem, e mesmo quando toda a lista termina, ele continua "sorteando". Tentei colocar "Array".filter(amigo => !"Array".includes(amigo)); também tentei usar o mesmo conceito do exercício dos números aleatórios if (quantidadeDeElementosNaLista == numeroLimite) { listaDeNumerosSorteados = []; } if (listaDeNumerosSorteados.includes(numeroEscolhido)) e também não deu certo.

Alguém pode me ajudar? Eu agradeço. Pois, eu estou quebrando a cabeça...o tempo passando. Segue abaixo o código que eu escrevi:

//O principal objetivo deste desafio é fortalecer suas habilidades em lógica de programação. Aqui você deverá desenvolver a lógica para resolver o problema. let listaDeAmigos = []; // Criar um local de armazenagem, uma Array para armazenar os nomes dos amigos. function adicionarAmigo() { // Cria uma função para adicionar um amigo à lista. const inputAmigo = document.getElementById("amigo"); const nomeAmigo = capitalizeFirstLetter(inputAmigo.value.trim());

// Verificar se o campo nome está vazio, e envia mensagem. const regex = /^[A-Za-zÀ]/; // Exige que o nome começe com uma letra, e mesmmo que digitar a 1° letra minúscula e vai se tornar maiúscula. if (!regex.test(nomeAmigo)) { // Avalaia se o nome começa com uma letra. inputAmigo.value = ""; // Limpa o campo para o usuário inserir outro nome. alert("Por favor, insira um nome válido."); // Após clicar no "ok" na mensagem, ela se apaga e volta ao campo onde se inclui o nome, com o campo vazio. return; // Sai da função. }

// Verifica se o campo onde se inclui um nome está vazio, caso esteja e o usuário clicou para inserir, enia menságem. if (nomeAmigo === "") { alert("Por favor, insira um nome válido.");// Após clicar no "ok" na mensagem, ela se apaga e volta para o campo onde se inclui o nome. return; // Sai da função. }

if (listaDeAmigos.includes(nomeAmigo)) { // Verifica se o nome é repetido, se já consta na lista de nomes inclusos. alert(O nome '${nomeAmigo}' já está na lista!); // Após clicar no "ok" na mensagem, ela se apaga e volta ao campo onde se inclui o nome, com o campo vazio. inputAmigo.value = ""; // Limpa o campo para o usuário inserir outro nome. return; // Sai da função para não adicionar o nome repetido. }

listaDeAmigos.push(nomeAmigo); atualizarListaDeAmigos(); inputAmigo.value = ""; }

function atualizarListaDeAmigos() { // Função para atualizar a lista de amigos que é exibida na página. const listaAmigosElement = document.getElementById("listaAmigos"); listaAmigosElement.innerHTML = "";

listaDeAmigos.forEach((amigo, index) => { const li = document.createElement("li"); li.textContent = amigo; listaAmigosElement.appendChild(li); }); }

// Função para (pegar) capitalizar a primeira letra de uma string function capitalizeFirstLetter(string) { return string.charAt(0).toUpperCase() + string.slice(1); }

// Função para sortear um amigo secreto function sortearAmigo() { let mensagemElement = document.getElementById("mensagem");

const indiceSorteado = Math.floor(Math.random() * listaDeAmigos.length); const amigoSorteado = listaDeAmigos[indiceSorteado];

// Comando para Ocultar a lista de amigos const listaAmigosElement = document.getElementById("listaAmigos"); listaAmigosElement.style.display = "none";

// Comando para exibir o resultado do sorteio const resultadoElement = document.getElementById("resultado"); resultadoElement.innerHTML = <li>O amigo secreto sorteado é: ${amigoSorteado}</li>; }

// Adicionar evento de input para (pegar) capitalizar a primeira letra enquanto o usuário digita. document.getElementById("amigo").addEventListener("input", function (event) { const input = event.target; input.value = capitalizeFirstLetter(input.value); });

// Adicionar evento de keydown para adicionar amigo ao pressionar Enter document.getElementById("amigo").addEventListener("keydown", function (event) { if (event.key === "Enter") { adicionarAmigo(); } });

1 resposta

Boa tarde Pessoal. Eu estou precisando de ajuda. Eu escrevi o código para o Amigo Secreto. Ele funciona tudo certo. Porem, ele repete os nomes quando sorteia, e mesmo quando todos os nomes da lista já foram sorteados ele não para. Tem como eu colocar algumas funções, nesse código que já escrevi, para ele não repetir o nome já sorteado, ou ir tirando da lista o nome sorteado, e quando todos os nomes da lista forem sorteados, ele exibir uma mensagem "Todos os nomes já foram sorteados! inicie uma nova lista."? Alguém pode me ajudar? Alguém sabe como fazer isso? Eu quebrei a cabeça com varios códigos e não deu certo, eu não sei onde eu estou errando. E o meu tempo está acabando. Quem puder me ajudar, eu agradeço muito.

Eu coloquei, abaixo, os códigos em blocos sequenciais, para talvez ficar mais fácil de visualizar e entender. Grato.

let listaDeAmigos = []; // Criar um local de armazenagem, uma Array para armazenar os nomes dos amigos.
function adicionarAmigo() { // Cria uma função para adicionar um amigo à lista.
  const inputAmigo = document.getElementById("amigo");
  const nomeAmigo = capitalizeFirstLetter(inputAmigo.value.trim());
// Verificar se o  campo nome está vazio, e envia mensagem.
  const regex = /^[A-Za-zÀ-ÖØ-öø-ÿ]+$/; // Exige que o nome começe com uma letra, e mesmmo que digitar a 1° letra minúscula e vai se tornar maiúscula.
  if (!regex.test(nomeAmigo)) { // Avalaia se o nome começa com uma letra.
    inputAmigo.value = ""; // Limpa o campo para o usuário inserir outro nome.
    alert("Por favor, insira um nome válido. Somente letras"); // Após clicar no "ok" na mensagem, ela se apaga e volta ao campo onde se inclui o nome, com o campo vazio.
    return;  // Sai da função.
  }
// Verifica se o campo onde se inclui um nome está vazio, caso esteja e o usuário clicou para inserir, enia menságem.
  if (nomeAmigo === "") {
    alert("Por favor, insira um nome válido.");// Após clicar no "ok" na mensagem, ela se apaga e volta para o campo onde se inclui o nome.
    return;  // Sai da função.
 }
if (listaDeAmigos.includes(nomeAmigo)) { // Verifica se o nome é repetido, se já consta na lista de nomes inclusos.
  alert(`O nome '${nomeAmigo}' já está na lista!`); // Após clicar no "ok" na mensagem, ela se apaga e volta ao campo onde se inclui o nome, com o campo vazio.
  inputAmigo.value = ""; // Limpa o campo para o usuário inserir outro nome.
  return; // Sai da função para não adicionar o nome repetido.
`listaDeAmigos.push(nomeAmigo);
  atualizarListaDeAmigos();
  inputAmigo.value = "";
function atualizarListaDeAmigos() { // Função para atualizar a lista de amigos que é exibida na página.
  const listaAmigosElement = document.getElementById("listaAmigos");
  listaAmigosElement.innerHTML = "";
 listaDeAmigos.forEach((amigo, index) => {
    const li = document.createElement("li");
    li.textContent = amigo;
    listaAmigosElement.appendChild(li);
  });
// Função para (pegar) capitalizar a primeira letra de uma string
function capitalizeFirstLetter(string) {
  return string.charAt(0).toUpperCase() + string.slice(1);
}
// Função para sortear um amigo secreto
function sortearAmigo() {
  let mensagemElement = document.getElementById("mensagem");
  const indiceSorteado = Math.floor(Math.random() * listaDeAmigos.length);
  const amigoSorteado = listaDeAmigos[indiceSorteado];
// Comando para Ocultar a lista de amigos
  const listaAmigosElement = document.getElementById("listaAmigos");
  listaAmigosElement.style.display = "none";
// Comando para exibir o resultado do sorteio
  const resultadoElement = document.getElementById("resultado");
  resultadoElement.innerHTML = `<li>O amigo secreto sorteado é: ${amigoSorteado}</li>`;
// Adicionar evento de input para (pegar) capitalizar a primeira letra enquanto o usuário digita.
document.getElementById("amigo").addEventListener("input", function (event) {
  const input = event.target;
  input.value = capitalizeFirstLetter(input.value);
});
// Adicionar evento de keydown para adicionar amigo ao pressionar Enter
document.getElementById("amigo").addEventListener("keydown", function (event) {
  if (event.key === "Enter") {
    adicionarAmigo();