Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

121
Views
filtrar matriz de datos valores múltiples javascript

Sé que esta pregunta se ha hecho antes, pero las soluciones existentes no parecen funcionar para mi caso. Estoy tratando de filtrar datos sobre la base de múltiples propiedades/valores en una variedad variada de objetos.

Mis datos de muestra se ven así:

 const products = [ { name: 'A', color: 'Blue', size: 50, locations: 'USA' }, { name: 'B', color: 'Blue', size: 60, locations: 'Europe' }, { name: 'C', color: 'Blue', size: 30, locations: 'Europe' }, { name: 'D', color: 'Black', size: 70, locations: 'Japan' }, { name: 'E', color: 'Green', size: 50, locations: 'Europe' }, { name: 'F', color: 'Blue', size: 50, locations: 'Brazil' }, { name: 'G', color: 'Black', size: 40, locations: 'Australia' }, ];

Esto es lo que necesito que sea el resultado de los filtros:

 const filters_one = ['Blue']; const requiredResult_One = [ { name: 'A', color: 'Blue', size: 50, locations: 'USA' }, { name: 'B', color: 'Blue', size: 60, locations: 'Europe' }, { name: 'C', color: 'Blue', size: 30, locations: 'Europe' }, { name: 'E', color: 'Blue', size: 50, locations: 'Brazil' }, ] const filters_two = ['Blue', 'Europe']; const requiredResult_Two = [ { name: 'B', color: 'Blue', size: 60, locations: 'Europe' }, { name: 'C', color: 'Blue', size: 30, locations: 'Europe' }, ] ----------OR------------------------- const filters_three = ['Black']; const requiredResult_three = [ { name: 'D', color: 'Black', size: 70, locations: 'Japan' }, { name: 'G', color: 'Black', size: 40, locations: 'Australia' }, ] const filters_four = ['Black', 'Japan']; const requiredResult_Four = [ { name: 'D', color: 'Black', size: 70, locations: 'Japan' }, ]

esto es lo que he logrado hasta ahora:

 const filterdata = (products, filter) => { // where, filter can be equal to *filters_one*, *filters_two*, *filters_three*, or *filters_four* anyone of it. // const keysExact = ['color', 'locations']; const valuesExact = filter.map(col => col.toLowerCase()); const resultExact = products.filter((prod) => keysExact.every((key) => valuesExact.includes(prod[key].toLowerCase())) ); console.log(resultExact); };

Esto parece funcionar parcialmente o no me parece un buen enfoque. Si alguien puede ayudarme con una mejor solución en esto, será realmente útil.

¡Gracias por adelantado!

about 4 years ago · Juan Pablo Isaza
3 answers
Answer question

0

Puede obtener los valores del objeto y verificar si todos los valores de la consulta están en la matriz de valores.

 const filter = (data, query) => data.filter(o => { const values = Object.values(o); return query.every(q => values.includes(q)); }), products = [{ name: 'A', color: 'Blue', size: 50, locations: 'USA' }, { name: 'B', color: 'Blue', size: 60, locations: 'Europe' }, { name: 'C', color: 'Blue', size: 30, locations: 'Europe' }, { name: 'D', color: 'Black', size: 70, locations: 'Japan' }, { name: 'E', color: 'Green', size: 50, locations: 'Europe' }, { name: 'F', color: 'Blue', size: 50, locations: 'Brazil' }, { name: 'G', color: 'Black', size: 40, locations: 'Australia' }]; console.log(filter(products, ['Blue'])); console.log(filter(products, ['Blue', 'Europe'])); console.log(filter(products, ['Black'])); console.log(filter(products, ['Black', 'Japan'])); console.log(filter(products, [['Blue', 'Green']]));
 .as-console-wrapper { max-height: 100% !important; top: 0; }

Un enfoque para valores alternativos de la misma clave.

 const filter = (data, query) => data.filter(o => { const values = Object.values(o); return query.every(q => values.includes(q) || Array.isArray(q) && q.some(v => values.includes(v)) ); }), products = [{ name: 'A', color: 'Blue', size: 50, locations: 'USA' }, { name: 'B', color: 'Blue', size: 60, locations: 'Europe' }, { name: 'C', color: 'Blue', size: 30, locations: 'Europe' }, { name: 'D', color: 'Black', size: 70, locations: 'Japan' }, { name: 'E', color: 'Green', size: 50, locations: 'Europe' }, { name: 'F', color: 'Blue', size: 50, locations: 'Brazil' }, { name: 'G', color: 'Black', size: 40, locations: 'Australia' }]; console.log(filter(products, ['Blue'])); console.log(filter(products, [['Blue', 'Green']]));
 .as-console-wrapper { max-height: 100% !important; top: 0; }

about 4 years ago · Juan Pablo Isaza Report

0

const filterArray = (filter, arr) => { return arr.filter(val => (filter[1] ? val.color === filter[0] && val.locations === filter[1] : val.color === filter[0])); };
about 4 years ago · Juan Pablo Isaza Report

0

Puede crear un filtro basado en el color y la location

 const products = [ { name: 'A', color: 'Blue', size: 50, locations: 'USA' }, { name: 'B', color: 'Blue', size: 60, locations: 'Europe' }, { name: 'C', color: 'Blue', size: 30, locations: 'Europe' }, { name: 'D', color: 'Black', size: 70, locations: 'Japan' }, { name: 'E', color: 'Green', size: 50, locations: 'Europe' }, { name: 'F', color: 'Blue', size: 50, locations: 'Brazil' }, { name: 'G', color: 'Black', size: 40, locations: 'Australia' }, ]; function filterProducts(filterParams) { const [color, country] = filterParams; const output = products.filter((product) => product.color === color && (country ? product.locations === country : true)) return output; } const filters_one = ['Blue']; const requiredResult_One = filterProducts(filters_one); console.log(requiredResult_One); const filters_two = ['Blue', 'Europe']; const requiredResult_Two = filterProducts(filters_two); console.log(requiredResult_Two); const filters_three = ['Black']; const requiredResult_three = filterProducts(filters_three); console.log(requiredResult_three); const filters_four = ['Black', 'Japan']; const requiredResult_Four = filterProducts(filters_four); console.log(requiredResult_Four);

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!