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

Filtrando sem regex? (!) vs (!(...))

Só não entendi porquê aqui if(!(valorDigitado==comparavel)) precisa de parêntesis dentro de parêntesis na hora de colocar o exclamação ! e aqui if(!expressao.test(nome)) pode usar o exclamação ! sem necessidade de parêntesis.

var campoFiltro=document.querySelector("#filtrar-tabela");
campoFiltro.addEventListener("input",function(){
    console.log(this.value);
    var pacientes=document.querySelectorAll(".paciente");
    if(this.value.length>0){
        for(var i=0;i<pacientes.length;i++){
            var paciente=pacientes[i];
            var tdNome=paciente.querySelector(".info-nome");
            var nome=tdNome.textContent;
            var expressao= new RegExp(this.value,"i");
            if(!expressao.test(nome)){
                paciente.classList.add("invisivel");
            }else{
                paciente.classList.remove("invisivel");
            }
        }
    }else{
        for(var i=0;i<pacientes.length;i++){
            var paciente=pacientes[i];
            paciente.classList.remove("invisivel");
        }
    }
})
var campoFiltro=document.querySelector("#filtrar-tabela");
campoFiltro.addEventListener("input",function(){
    console.log(this.value);
    var pacientes=document.querySelectorAll(".paciente");
    if(this.value.length>0){
        for(var i=0;i<pacientes.length;i++){
            var paciente=pacientes[i];
            var tdNome=paciente.querySelector(".info-nome");
            var nome=tdNome.textContent;
            var comparavel=nome.substr(0,this.value.length).toLowerCase();
            var valorDigitado=this.value.toLowerCase();
            if(!(valorDigitado==comparavel)){
                paciente.classList.add("invisivel");
            }else{
                paciente.classList.remove("invisivel");
            }
        }
    }else{
        for(var i=0;i<pacientes.length;i++){
            var paciente=pacientes[i];
            paciente.classList.remove("invisivel");
        }
    }
})
4 respostas

Fala Jorge, tudo bem? Espero que sim!

Precisamos utilizar parênteses pois valorDigitado==comparavel ja é uma expressão, então para fazer uma expressão sobre outra precisamos "agrupar" essa expressão, e como expressao.test(nome) nao é uma expressão e sim um método, não há necessidade desse "agrupamento"

Espero que tenha entendido, abraços e bons estudos :D

Ainda não entendi mas tudo bem. Obrigado Mateus.

solução!

Oi Jorge, oi Mateus,

Apenas para complementar e talvez ficar mais fácil entender.

Vamos pensar o seguinte, se a gente colocar if( !valorDigitado == comparavel), estamos trocando o sinal apenas da variável valorDigitado.

Porém, se a gente usar !( valorDigitado == comparavel) primeiro verifica se valorDigitado == comparavel se for igual, depois a gente inverte o resultado da expressão inteira.

Perceba que em alguns casos, inverter o sinal apenas de valorDigitado pode gerar um resultado diferente do esperado. Colocando os parêntesis, a gente garante que ele vai primeiro verificar toda a expressão e só depois inverter o valor.

Espero que tenha ficado mais claro, gostei bastante da sua dúvida porque esses pequenos detalhes fazem toda a diferença.

Forte abraço!

Obrigado Mateus e Matheus!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software