To complement the already good response from @dvd, I put here another solution using filter
and indexOf
and toLowerCase
.
First approach with filter
and indexOf
Using the above two functions to filter people can do:
const pessoasFiltradas=pessoas.filter(pessoa=>pessoa.nome_com.indexOf(filtro)!=-1);
And only with this line of code does the filter you need. Let's try to make the most of this line of code:
- We are saying that
pessoasFiltradas
corresponds to the execution of method filter
- The
filter
filtering based on past function
- In the example above, filters whether
pessoa.nome_com
contains text in filtro
- The
indexOf
returns -1
if it does not exist, that is if it does not contain the last text
Note, however, that there is no case-sensitive code so you must type Herbas
to work.
See and experiment with Herbas
:
const pessoas = [
{"nome_com":"Juan Carlos Herbas Mota",
"data_na":"21/01/1988",
"estado_c":"Casado",
"cargo":"Gerente",
"Salario":"8500"
},
{"nome_com":"Luis Hernan Dias Pato",
"data_na":"12/10/1960",
"estado_c":"Solteiro",
"cargo":"Contador",
"Salario":"8500"
}
];
const procura = document.getElementById("procura");
document.getElementById("procurar").addEventListener("click", function(){
let filtro = procura.value;
const pessoasFiltradas = pessoas.filter(pessoa => pessoa.nome_com.indexOf(filtro) != -1);
console.log(pessoasFiltradas);
});
<input type="text" id="procura" placeholder="Pessoa a procurar">
<input type="button" id ="procurar" value="Procurar">
Checking if there are no results for the search
It also makes it simple to figure out if there are no people for the given query since you only have to test if the array size obtained in filter
is 0
:
const pessoasFiltradas=pessoas.filter(pessoa=>pessoa.nome_com.indexOf(filtro)!=-1);
if (pessoasFiltradas.length > 0){
console.log(pessoasFiltradas);
}
else {
console.log("Não existem pessoas para o nome indicado");
}
Search case insesitive
Now to create a case insensitive search you need to convert both the filter and the array data to uppercase or lowercase before applying the search. In this example I will convert both to lowercase based on the toLowerCase
of String
.
So it will be necessary to apply toLowerCase
to filtro
and nome_com
to be tested:
const pessoas = [
{"nome_com":"Juan Carlos Herbas Mota",
"data_na":"21/01/1988",
"estado_c":"Casado",
"cargo":"Gerente",
"Salario":"8500"
},
{"nome_com":"Luis Hernan Dias Pato",
"data_na":"12/10/1960",
"estado_c":"Solteiro",
"cargo":"Contador",
"Salario":"8500"
}
];
const procura = document.getElementById("procura");
document.getElementById("procurar").addEventListener("click", function(){
let filtro = procura.value.toLowerCase(); //aqui
const pessoasFiltradas = pessoas.filter(
pessoa => pessoa.nome_com.toLowerCase().indexOf(filtro) != -1);
//-----------------------------^ e aqui
if (pessoasFiltradas.length > 0){
console.log(pessoasFiltradas);
}
else {
console.log("Não existem pessoas para o nome indicado");
}
});
<input type="text" id="procura" placeholder="Pessoa a procurar">
<input type="button" id ="procurar" value="Procurar">