search for value in object json and return position in array

3

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

Eg: Searching SOUZA return index position in the array and retrieve 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><inputtype="text" id="pesq" value="1290">
   <button onclick="filtrar()">filtrar</button>
   <hr>
   <hr>
   <div id="resultado"></div>
   <div id="resultado2"></div>
</body>
</html>
    
asked by anonymous 04.09.2018 / 21:46

2 answers

1

One way to do this is to use 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"));
    
05.09.2018 / 14:14
3

Using for...in in the main array you can search within the subarray sub_infos of the searched string and return the index value when the loop stops when it encounters the occurrence. To ignore case sensitive , I used .toLowerCase() in the searched string and the array string to fetch.

I declare the variable index before the for loop. If nothing is found, it will be undefined and if will enter the else condition.

  

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

See:

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><inputtype="text" id="pesq" value="SOUZA">
<button onclick="filtrar()">filtrar</button>
<hr>
<hr>
<div id="resultado"></div>
<div id="resultado2"></div>
    
04.09.2018 / 22:45