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

250
Views
¿Cuál es la mejor manera de consultar una matriz en javascript para obtener solo los elementos que quiero?

Tengo una matriz como esta (con poco más de 3000 objetos en lugar de los 3 aquí):

 items = [{name:'charlie', age:'16'}, {name:'ben', age:'18'}, {name:'steve', age:'18'}]

¿Cuál es la mejor manera de devolver una matriz con solo los objetos de personas que tienen 18 años? Entonces yo quiero:

 items = [{name:'ben', age:'18'}, {name:'steve', age:'18'}]

Lo mejor que se me ocurre es esto (usando jQuery):

 newArray = [] $.each(items, function(index, item) { if(item.age=='18') { newArray.push(item) } })

Teniendo en cuenta que hay 3000 mil objetos, y también que haré esa comparación hasta cincuenta veces de una vez, eso es mucho bucle. ¿Hay una mejor manera?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puedes usar javascript puro

 var wanted = items.filter( function(item){return (item.age==18);} );

Y si su navegador no es compatible con la versión 1.6 de javascript, puede encontrar una implementación del método de filtro en https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/filter


Actualizar

En cuanto a la velocidad, hay una gran diferencia ( tuvo un error en la prueba ) de un bucle normal ( dependiendo del navegador ). Echa un vistazo a esta pequeña prueba que hice en http://jsperf.com/array-filter-vs- bucle/3

over 4 years ago · Santiago Trujillo Report

0

Obtenga el elemento y los elementos coincidentes usando el método find () y filter ()

Si desea el primer elemento único coincidente , use el método find () que devuelve un solo objeto.

Si desea que todos coincidan , use el método filter() que devuelve una matriz de objetos.

 let items = [{name:'charlie', age:'16'}, {name:'ben', age:'18'}, {name:'steve', age:'18'}] let all = items.filter(item=> item.age==='18') console.log(all); let single = items.find(item=> item.age==='18') console.log(single);

over 4 years ago · Santiago Trujillo Report

0

Si va a realizar la búsqueda con frecuencia, puede ser mejor mantener una versión de sus datos en un formulario que sea de rápido acceso. He usado underscore.js (http://documentcloud.github.com/underscore/) para que me resulte más fácil, pero este código creará un objeto que mantendrá sus datos indexados por el campo de edad.

Terminas con algo que se parece a esto:

 { "16": [ { "name": "charlie", "age": "16" } ], "18": [ { "name": "ben", "age": "18" }, { "name": "steve", "age": "18" } ] }

El código:

 var itemsByAge = _(items).reduce(function(memo, item) { memo[item.age] = memo[item.age] || []; memo[item.age].push(item); return memo; }, {}); alert(JSON.stringify(itemsByAge["18"]));
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!