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

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

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 Denunciar

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 Denunciar

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 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