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

153
Vistas
¿Cómo puedo crear una función de filtro de JavaScript para varios filtros a la vez?

Mi problema:

Tengo un sitio web donde puedo comparar productos almacenados dentro de una matriz (con objetos). Quiero agregar diferentes filtros de una matriz dentro de un objeto que se apliquen juntos.

Para dos filtros, puedo hacerlo fácilmente (vea mi código a continuación). Solo comparo dos objetos y uso un filtro dependiendo de su contenido.

Pero, ¿cuál sería un buen enfoque para usar el filtro si hay más de dos objetos? ¿Puedo recorrer el objeto y comparar si las matrices están vacías?

Con mi enfoque actual, tendría que extender mi código para cada filtro nuevo y se inflaría.

Lo que estoy tratando de hacer:

Quiero verificar qué objetos de filtro tienen datos en su matriz de "características" (esa matriz se llena después de que el usuario hace clic en un filtro en el sitio) y si es así, quiero usar estas matrices para filtrar la matriz filteredArray principal.

Mi objeto actual:

 features_collection: { aspect_ratio_object: { features: [], value: "Aspect Ratio", }, performance_rating_object: { features: [], value: "Performance Rating", }, },

Mi función de filtro:

 if ( features_collection.aspect_ratio_object.features.length && features_collection.performance_rating_object.features.length ) { return filteredArray.filter( (obj) => features_collection.aspect_ratio_object.features.includes( obj[features_collection.aspect_ratio_object.value] ) && features_collection.performance_rating_object.features.includes( obj[features_collection.performance_rating_object.value] ) ); } else if ( features_collection.aspect_ratio_object.features.length || features_collection.performance_rating_object.features.length ) { return filteredArray.filter( (obj) => features_collection.aspect_ratio_object.features.includes( obj[features_collection.aspect_ratio_object.value] ) || features_collection.performance_rating_object.features.includes( obj[features_collection.performance_rating_object.value] ) ); } },

Notas adicionales:

También puedo cambiar mi objeto. ¿Podría convertirlo en una matriz de objetos si eso facilitara las cosas?

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Obviamente tienes demasiado bucle a través de tu objeto.

Aquí está su código de bucle para Features_Collection:

 features_collection.forEach(function (item, index) { console.log(item, index); });
about 4 years ago · Juan Pablo Isaza Denunciar

0

Hacer que sus filtros sean una array parece más práctico. Aquí hay un ejemplo de cómo filtrar un conjunto de objetos contra su feature_collection de características.

 function filter_by_features(targets, feature_collection) { // Start right of to filter the `filteredArray` return targets.filter(obj => { // go through every feature and test it against the current object. // every() returns either true or false and the targets array is filtered // by that condition supplied within the callback of `every()` return feature_collection.every(filter => { // If for a given feature no filter is available, return true // so the test for this filter passes. if(filter.features.length === 0) { return true } // there are features, check if any applies. return filter.features.includes(obj[filter.value]) }) }) }
Uso
 // feature collection (as array) const feature_collection = [ { features: [], value: "Aspect Ratio", }, { features: [], value: "Performance Rating", } ] // the objects you want to filter. const objects_to_filter = [/* ... */] const filtered = filter_by_features(objects_to_filter, feature_collection)

documentos

  • cada()
about 4 years ago · Juan Pablo Isaza 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