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

[Bug] 'Validando amigo já adicionado' - SOLUCIONADO

Preciso de ajuda com um bug, na validação de nomes iguais, o 'alert' aparece mesmo com o array vazio e não permite adicionar nenhum nome. Segue código:

let amigos = [];

function adicionar(){
    let amigo = document.getElementById('nome-amigo');

    let lista = document.getElementById('lista-amigos');
    
    //este campo é necessário estar após as validações!!
    amigos.push(amigo.value); 
    
    if(amigo.value == ''){
        alert('Campo não pode ficar vazio, digite um nome válido!');
        return;
    }

    if(amigos.includes(amigo.value)){
        alert('Nome já adicionado');
        return;
    }

    if(lista.textContent == ''){
        lista.textContent = amigo.value;
    } else{
        lista.textContent = lista.textContent + ', ' + amigo.value
    }

    amigo.value = '';
}
1 resposta
solução!

Olá, Matheus. Tudo bem?

Pelo que você descreveu, parece que o problema está na ordem em que as operações estão sendo realizadas na função adicionar(). Atualmente, você está adicionando o nome ao array amigos antes de realizar as validações, o que faz com que o alert de "Nome já adicionado" apareça mesmo quando o array está inicialmente vazio. Para corrigir isso, você deve mover a linha amigos.push(amigo.value); para depois das validações. Assim, o nome só será adicionado ao array se passar pelas verificações. Veja como o código deve ficar:

let amigos = [];

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

    if (amigo.value == '') {
        alert('Campo não pode ficar vazio, digite um nome válido!');
        return;
    }

    if (amigos.includes(amigo.value)) {
        alert('Nome já adicionado');
        return;
    }

    // Adiciona o nome ao array somente após as validações
    amigos.push(amigo.value);

    if (lista.textContent == '') {
        lista.textContent = amigo.value;
    } else {
        lista.textContent = lista.textContent + ', ' + amigo.value;
    }

    amigo.value = '';
}

Com essa alteração, o código deve funcionar conforme esperado, permitindo adicionar nomes ao array apenas se eles não estiverem vazios e ainda não tiverem sido adicionados.

Espero ter ajudado e bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.Bons Estudos!