search for value in json object and return position in array

Asked

Viewed 1,267 times

3

Is there any way to search for the last name in the object and return the position in the main array?

Ex.: Searching SOUZA return the position of the index in the array and recover the same data for display.

function filtrar(){
   var quadro=[
        {"numero_id":"2500","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO1"},{"tipo":"SOBRENOME","valor":"SABINO"}],"salario":"5790,40","usuario":"Gerente","nivel":4,"dias":"457","status":"ativo"},
	{"numero_id":"2115","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO2"},{"tipo":"SOBRENOME","valor":"LEE"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"inativo"},
	{"numero_id":"1290","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO3"},{"tipo":"SOBRENOME","valor":"SOUZA"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"ativo"},
	{"numero_id":"708","posto":"10","posto_id":"-","cidade_id":"1","p_cidade":"Caxias do Sul","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"7"}],"turno":"diurno","vencendo":"SIM","verificar":"NÃO URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO7"},{"tipo":"SOBRENOME","valor":"SANTOS"}],"salario":"5790,40","usuario":"Gerente","nivel":4,"dias":"856","status":"ativo"},
	{"numero_id":"240","posto":"21","posto_id":"-","cidade_id":"12","p_cidade":"Sao Paulo","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO8"},{"tipo":"SOBRENOME","valor":"SILVA"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"ativo"}
   ];
   var valorpesq = $("#pesq").val();
   var alvo = quadro;
   index = alvo.findIndex(x => x.numero_id==valorpesq);
   var alvo2 = quadro[index];
   var result = $(alvo2.sub_infos).each(function(key, value){
       var valorpesq = $("#pesq").val();
       $("#resultado").html("<br> Nome: "+  alvo2.sub_infos[0].valor + " " + value.valor +" <br> Salário: " + quadro[index].salario);
				
   });
   $("#resultado2").html("<br><b> Posição do index "+index+": </b> <br>"+ JSON.stringify(alvo2));
}
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

</head>
<body>
   <input type="text" id="pesq" value="1290">
   <button onclick="filtrar()">filtrar</button>
   <hr>
   <hr>
   <div id="resultado"></div>
   <div id="resultado2"></div>
</body>
</html>

  • Not exactly what you already do with the ID? what exactly is your question?

2 answers

3

Using for...in in the main array you can search inside the sub sub_infos the string searched and return the value of index when the loop stops when finding the occurrence. To ignore the case sensitive, used .toLowerCase() in the searched string and in the array string to search for.

I declared the variable index before the noose for. If nothing is found, she will be undefined and the if will enter into condition else.

Obs.: If there is more than one entry with the same last name, it will always return the first found. As your example is only return 1 index, this solution will serve.

Behold:

function filtrar(){
   var quadro=[
        {"numero_id":"2500","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO1"},{"tipo":"SOBRENOME","valor":"SABINO"}],"salario":"5790,40","usuario":"Gerente","nivel":4,"dias":"457","status":"ativo"},
	{"numero_id":"2115","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO2"},{"tipo":"SOBRENOME","valor":"LEE"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"inativo"},
	{"numero_id":"1290","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO3"},{"tipo":"SOBRENOME","valor":"SOUZA"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"ativo"},
	{"numero_id":"708","posto":"10","posto_id":"-","cidade_id":"1","p_cidade":"Caxias do Sul","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"7"}],"turno":"diurno","vencendo":"SIM","verificar":"NÃO URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO7"},{"tipo":"SOBRENOME","valor":"SANTOS"}],"salario":"5790,40","usuario":"Gerente","nivel":4,"dias":"856","status":"ativo"},
	{"numero_id":"240","posto":"21","posto_id":"-","cidade_id":"12","p_cidade":"Sao Paulo","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO8"},{"tipo":"SOBRENOME","valor":"SILVA"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"ativo"}
   ];

   var valorpesq = $("#pesq").val().toLowerCase();
   var alvo = quadro;
   var index;
   for(var i in alvo){
      if(alvo[i].sub_infos[1].valor.toLowerCase() == valorpesq){
         index = i;
         break; // suspende o laço caso tenha encontrado uma ocorrência
      }
   }
   
   if(index){
      var alvo2 = quadro[index];
      var result = $(alvo2.sub_infos).each(function(key, value){
          var valorpesq = $("#pesq").val();
          $("#resultado").html("<br> Nome: "+  alvo2.sub_infos[0].valor + " " + value.valor +" <br> Salário: " + quadro[index].salario);
               
      });
      $("#resultado2").html("<br><b> Posição do index "+index+": </b> <br>"+ JSON.stringify(alvo2));
   }else{
      $("#resultado").html("Nada encontrado com "+ valorpesq);
      $("#resultado2").empty(); // esvazia a div
   }
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" id="pesq" value="SOUZA">
<button onclick="filtrar()">filtrar</button>
<hr>
<hr>
<div id="resultado"></div>
<div id="resultado2"></div>

  • for some reason when used in practice there is a variation in the sub_infos data, from:":[{"type":"NAME","value":"FULANO3"},{"type":"LAST NAME","value":"SOUZA"}]

  • Relax... explain what kind of variations can occur that we make the code.

  • By the content of the question, the answer solves the problem... If you have something else, then you should have explained in the question initially.

  • Explain the variation so we can adapt the code.

1


One way to do this is to use the findIndex() in the array of sub_infos within the search of findIndex() of the main array.

Example:

var quadro=[{"numero_id":"2500","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO1"},{"tipo":"SOBRENOME","valor":"SABINO"}],"salario":"5790,40","usuario":"Gerente","nivel":4,"dias":"457","status":"ativo"},
	{"numero_id":"2115","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO2"},{"tipo":"SOBRENOME","valor":"LEE"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"inativo"},
	{"numero_id":"1290","posto":"43","posto_id":"-","cidade_id":"14","p_cidade":"Cruz Alta","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO3"},{"tipo":"SOBRENOME","valor":"SOUZA"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"ativo"},
	{"numero_id":"708","posto":"10","posto_id":"-","cidade_id":"1","p_cidade":"Caxias do Sul","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"7"}],"turno":"diurno","vencendo":"SIM","verificar":"NÃO URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO7"},{"tipo":"SOBRENOME","valor":"SANTOS"}],"salario":"5790,40","usuario":"Gerente","nivel":4,"dias":"856","status":"ativo"},
	{"numero_id":"240","posto":"21","posto_id":"-","cidade_id":"12","p_cidade":"Sao Paulo","empresa_tipo":"2","request":1,"servicos_prestados":[{"id":"1"},{"id":"2"},{"id":"4"}],"turno":"diurno","vencendo":"SIM","verificar":"URGENTE","descricao":"descricao ","sub_infos":[{"tipo":"NOME","valor":"FULANO8"},{"tipo":"SOBRENOME","valor":"SILVA"}],"salario":"1321,80","usuario":"Colaborador 1","nivel":2,"dias":"391","status":"ativo"}
];

function indicePorSobrenome(arr, sobrenome) {
  return arr.findIndex(function (v) {
    return v.sub_infos && v.sub_infos.findIndex(function (v2) {
      return (v2.tipo === "SOBRENOME" && v2.valor === sobrenome);
    }) >= 0;
  });
}

console.log(indicePorSobrenome(quadro, "SOUZA"));
console.log(indicePorSobrenome(quadro, "SABINO"));
console.log(indicePorSobrenome(quadro, "LEE"));
console.log(indicePorSobrenome(quadro, "STARK"));

Browser other questions tagged

You are not signed in. Login or sign up in order to post.