Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

225
Visualizações
use jQuery's find () en el objeto JSON

Similar a la pregunta de brnwdrng , estoy buscando una manera de buscar a través de un objeto similar a JSON.
suponiendo que la estructura de mi objeto es así:

 TestObj = { "Categories": [{ "Products": [{ "id": "a01", "name": "Pine", "description": "Short description of pine." }, { "id": "a02", "name": "Birch", "description": "Short description of birch." }, { "id": "a03", "name": "Poplar", "description": "Short description of poplar." }], "id": "A", "title": "Cheap", "description": "Short description of category A." }, { "Product": [{ "id": "b01", "name": "Maple", "description": "Short description of maple." }, { "id": "b02", "name": "Oak", "description": "Short description of oak." }, { "id": "b03", "name": "Bamboo", "description": "Short description of bamboo." }], "id": "B", "title": "Moderate", "description": "Short description of category B." }] };

Me gustaría obtener un objeto con id="A".

He probado todo tipo de cosas como:

 $(TestObj.find(":id='A'"))

Pero nada parece funcionar.

¿Alguien puede pensar en una forma de recuperar un elemento en función de algunos criterios sin usar 'cada'?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

jQuery no funciona en literales de objetos simples. Puede usar la siguiente función de manera similar para buscar todos los 'id' (o cualquier otra propiedad), independientemente de su profundidad en el objeto:

 function getObjects(obj, key, val) { var objects = []; for (var i in obj) { if (!obj.hasOwnProperty(i)) continue; if (typeof obj[i] == 'object') { objects = objects.concat(getObjects(obj[i], key, val)); } else if (i == key && obj[key] == val) { objects.push(obj); } } return objects; }

Usar así:

 getObjects(TestObj, 'id', 'A'); // Returns an array of matching objects
over 4 years ago · Santiago Trujillo Relatório

0

La solución de javascript puro es mejor, pero una forma de jQuery sería usar los métodos jQuery grep y/o map . Probablemente no sea mucho mejor que usar $.each

 jQuery.grep(TestObj, function(obj) { return obj.id === "A"; });

o

 jQuery.map(TestObj, function(obj) { if(obj.id === "A") return obj; // or return obj.name, whatever. });

Devuelve una matriz de los objetos coincidentes o de los valores buscados en el caso de map. Podría ser capaz de hacer lo que quieras simplemente usándolos.

Pero en este ejemplo tendría que hacer algo de recursividad, porque los datos no son una matriz plana y estamos aceptando estructuras, claves y valores arbitrarios, tal como lo hacen las soluciones de JavaScript puro.

 function getObjects(obj, key, val) { var retv = []; if(jQuery.isPlainObject(obj)) { if(obj[key] === val) // may want to add obj.hasOwnProperty(key) here. retv.push(obj); var objects = jQuery.grep(obj, function(elem) { return (jQuery.isArray(elem) || jQuery.isPlainObject(elem)); }); retv.concat(jQuery.map(objects, function(elem){ return getObjects(elem, key, val); })); } return retv; }

Esencialmente lo mismo que la respuesta de Box9, pero usando las funciones de la utilidad jQuery donde sea útil.

········

over 4 years ago · Santiago Trujillo Relatório

0

Esto me funciona en [{"id":"data"},{"id":"data"}]

 function getObjects(obj, key, val) { var newObj = false; $.each(obj, function() { var testObject = this; $.each(testObject, function(k,v) { //alert(k); if(val == v && k == key) { newObj = testObject; } }); }); return newObj; }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda