Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

374
Views
¿Cómo encontrar un valor en una matriz de objetos en JavaScript?

Tengo una serie de objetos:

 Object = { 1 : { name : bob , dinner : pizza }, 2 : { name : john , dinner : sushi }, 3 : { name : larry, dinner : hummus } }

Quiero poder buscar en el objeto/matriz dónde está la clave "cena" y ver si coincide con "sushi".

Sé que jQuery tiene $.inArray, pero no parece funcionar en matrices de objetos. O tal vez estoy equivocado. indexOf también parece funcionar solo en un nivel de matriz.

¿No hay ninguna función o código existente para esto?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Si tienes una matriz como

 var people = [ { "name": "bob", "dinner": "pizza" }, { "name": "john", "dinner": "sushi" }, { "name": "larry", "dinner": "hummus" } ];

Puede usar el método de filter de un objeto Array:

 people.filter(function (person) { return person.dinner == "sushi" }); // => [{ "name": "john", "dinner": "sushi" }]

En las implementaciones de JavaScript más nuevas, puede usar una expresión de función:

 people.filter(p => p.dinner == "sushi") // => [{ "name": "john", "dinner": "sushi" }]

Puedes buscar personas que tienen "dinner": "sushi" usando un map

 people.map(function (person) { if (person.dinner == "sushi") { return person } else { return null } }); // => [null, { "name": "john", "dinner": "sushi" }, null]

o una reduce

 people.reduce(function (sushiPeople, person) { if (person.dinner == "sushi") { return sushiPeople.concat(person); } else { return sushiPeople } }, []); // => [{ "name": "john", "dinner": "sushi" }]

¡Estoy seguro de que puede generalizar esto a claves y valores arbitrarios!

over 4 years ago · Santiago Trujillo Report

0

jQuery tiene un método jQuery.grep que funciona de manera similar a la función de filter ES5 de @adamse's Answer y debería funcionar bien en navegadores más antiguos.

Usando el ejemplo de Adamse:

 var peoples = [ { "name": "bob", "dinner": "pizza" }, { "name": "john", "dinner": "sushi" }, { "name": "larry", "dinner": "hummus" } ];

puedes hacer lo siguiente

 jQuery.grep(peoples, function (person) { return person.dinner == "sushi" }); // => [{ "name": "john", "dinner": "sushi" }]
over 4 years ago · Santiago Trujillo Report

0

Si va a realizar esta búsqueda con frecuencia, considere cambiar el formato de su objeto para que la cena sea realmente una clave. Esto es como asignar una clave principal agrupada en una tabla de base de datos. Así por ejemplo:

 Obj = { 'pizza' : { 'name' : 'bob' }, 'sushi' : { 'name' : 'john' } }

Ahora puede acceder fácilmente de esta manera: Object['sushi']['name']

O si el objeto realmente es así de simple (solo 'nombre' en el objeto), podría cambiarlo a:

 Obj = { 'pizza' : 'bob', 'sushi' : 'john' }

Y luego acceda a él como: Object['sushi'] .

Obviamente, no siempre es posible o ventajoso reestructurar su objeto de datos de esta manera, pero el punto es que, a veces, la mejor respuesta es considerar si su objeto de datos está estructurado de la mejor manera. Crear una clave como esta puede ser más rápido y crear un código más limpio.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!