Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

161
Visualizações
¿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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda