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

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

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

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

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