¿Cómo crear una función de filtro múltiple para filtrar múltiples atributos usando JS?
Matriz de objetos a filtrar
[
{
"name": "Apple",
"age": 24,
"model": "Android",
"status": "Under development",
},
{
"name": "Roboto",
"age": 24,
"model": "Apple",
"status": "Running",
},
.
.
.
.
]
Necesito filtrar la matriz usando múltiples parámetros usando el método de filtro JS. Tengo una solución parcial y no pude obtener el resultado esperado (atascado).
Aquí, el filtro también debería funcionar con varios valores para un solo atributo. Por ejemplo, edad = 54,23 o modelo = Android, Apple, etc.
En pocas palabras, estoy tratando de imitar el funcionamiento de los filtros como el de un sitio de comercio electrónico donde podemos comparar todos los atributos de un producto y las etiquetas elegidas por el cliente para generar una lista filtrada de productos.
Cualquier ayuda es apreciada. ¡Gracias!
Respuestas
Si formatea las condiciones de su filtro como un objeto en su matriz de datos, pero los valores son matrices de valores posibles, entonces puede usar el filter
método de la siguiente manera:
let data = [
{
"name": "Apple",
"age": 24,
"model": "Android",
"status": "Under development",
}, {
"name": "Roboto",
"age": 24,
"model": "Apple",
"status": "Running",
}, {
"name": "Samsung",
"age": 26,
"model": "Blueberry",
"status": "Running",
},
];
let filter = {
"name": ["Roboto", "Ericsson"],
"age": [22, 24, 26],
};
let res = data.filter(obj =>
Object.entries(filter).every(([prop, find]) => find.includes(obj[prop])));
console.log(res);