Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

227
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda