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

222
Vistas
Filtre un objeto si varias condiciones en otro objeto son verdaderas

 var data = [ {"id": 1, "area": 965, "bedrooms": 1, "floor": 3, "price": 2200}, {"id": 2,"area": 1065, "bedrooms": 2, "floor": 6, "price": 2726}, {"id": 3,"area": 401, "bedrooms": 2, "floor": 4, "price": 2726}, {"id": 4,"area": 699, "bedrooms": 3, "floor": 8, "price": 1232}, {"id": 5,"area": 661, "bedrooms": 1, "floor": 9, "price": 1277}, {"id": 6,"area": 412, "bedrooms": 1, "floor": 12, "price": 518}, {"id": 7,"area": 925, "bedrooms": 2, "floor": 10, "price": 2509}, ]; // The filters I want to apply to my raw data var filters = [ {highValue: 9, lowValue: 4, type: "floor"}, {highValue: 700, lowValue: 400, type: "area"}, ]; var filteredData = data.filter(function(item){ for(var key in filters){ //Loop through the filters, get the type and values var filterType = filters[key].type; var filterHighValue = filters[key].highValue; var filterLowValue = filters[key].lowValue; //Get the object keys from the data. //Get the particular key that matches the filterType var itemKeys = Object.keys(item); var itemKey = itemKeys.filter(function(matchedKey){ if(matchedKey == filterType){ return matchedKey; } }); //Eg., if ['floor'] == 'floor' // Check if the floor value in our data object is between the two values in our filter. if(filterType == itemKey){ if(item[itemKey] <= filterHighValue && item[itemKey] >= filterLowValue){ return item[itemKey]; } } } }); console.log(filteredData);

Tengo una matriz de objetos que intento filtrar dinámicamente con otra matriz de objetos. Tengo problemas para descifrar la lógica para filtrar mis datos por todas las condiciones en mi objeto de filtro.

filteredData actualmente devuelve los objetos con los ID 2,3,4,5 y 6. Quiero que devuelva solo 3,4,5 ya que esas filas cumplen AMBAS condiciones en mi matriz de filtros. Obviamente, se devuelven 2,3,4,5 y 6 porque mi lógica solo requiere que una condición en la matriz sea verdadera, pero no estoy seguro de qué hacer al respecto.

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

0

Puede iterar los filtros y verificar si todas las restricciones son verdaderas.

 const data = [{ id: 1, area: 965, bedrooms: 1, floor: 3, price: 2200 }, { id: 2, area: 1065, bedrooms: 2, floor: 6, price: 2726 }, { id: 3, area: 401, bedrooms: 2, floor: 4, price: 2726 }, { id: 4, area: 699, bedrooms: 3, floor: 8, price: 1232 }, { id: 5, area: 661, bedrooms: 1, floor: 9, price: 1277 }, { id: 6, area: 412, bedrooms: 1, floor: 12, price: 518 }, { id: 7, area: 925, bedrooms: 2, floor: 10, price: 2509 }], filters = [{ highValue: 9, lowValue: 4, type: "floor" }, { highValue: 700, lowValue: 400, type: "area" }], result = data.filter(o => filters.every(({ highValue, lowValue, type }) => o[type] >= lowValue && o[type] <= highValue )); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede usar la función Array.prototype.every para verificar que todo el conjunto de condiciones es verdadero.

 const data = [{ id: 1, area: 965, bedrooms: 1, floor: 3, price: 2200 }, { id: 2, area: 1065, bedrooms: 2, floor: 6, price: 2726 }, { id: 3, area: 401, bedrooms: 2, floor: 4, price: 2726 }, { id: 4, area: 699, bedrooms: 3, floor: 8, price: 1232 }, { id: 5, area: 661, bedrooms: 1, floor: 9, price: 1277 }, { id: 6, area: 412, bedrooms: 1, floor: 12, price: 518 }, { id: 7, area: 925, bedrooms: 2, floor: 10, price: 2509 }]; const filters = [ {highValue: 9, lowValue: 4, type: "floor"}, {highValue: 700, lowValue:400, type: "area"},]; const result = data.filter(o => { return filters.every(({highValue, lowValue, type}) => { return o[type] <= highValue && o[type] >= lowValue; }); }); console.log(result);
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Denunciar

0

Puede filter aquellos objetos de datos donde every condición de filtro sea cierta.

 const data = [ { id: 1, area: 965, bedrooms: 1, floor: 3, price: 2200 }, { id: 2, area: 1065, bedrooms: 2, floor: 6, price: 2726 }, { id: 3, area: 401, bedrooms: 2, floor: 4, price: 2726 }, { id: 4, area: 699, bedrooms: 3, floor: 8, price: 1232 }, { id: 5, area: 661, bedrooms: 1, floor: 9, price: 1277 }, { id: 6, area: 412, bedrooms: 1, floor: 12, price: 518 }, { id: 7, area: 925, bedrooms: 2, floor: 10, price: 2509 }, ], filters = [ { highValue: 9, lowValue: 4, type: "floor" }, { highValue: 700, lowValue: 400, type: "area" }, ], filteredData = data.filter((d) => filters.every((f) => d[f.type] >= f.lowValue && d[f.type] <= f.highValue) ); console.log(filteredData);

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