Intentando filtrar una matriz de objetos por las propiedades de otra matriz de objetos:
datos que tengo
const filters = [ { "id": "breed", "value": "bulldog" }, { "id": "owner", "value": "Kevin" } ] const dogs = [ { "name": "Zephyr", "breed": "bulldog", "owner":"Kevin" }, { "name": "Dude", "breed": "labradoodle", "owner":"Lance" }, { "name": "Mark", "breed": "yorkie", "owner":"Rob" }, { "name": "Cheddar", "breed": "bulldog", "owner":"Kevin" }, ]La salida debería verse así:
[ { nombre: "Cheddar", raza: "bulldog", propietario: "Kevin", }, { nombre: "Zephyr", raza: "bulldog", propietario: "Kevin", }, ];
Pero en cambio estoy recibiendo sólo:
[ { "name": "Zephyr", "breed": "bulldog", "owner": "Kevin" } ]Esto es lo que estoy haciendo:
dogs.reduce((acc, obj) => { filters.forEach((element) => { if (dogs.find((i) => i[element.id].includes(element.value))) { if (!acc.some((e) => e[element.id].includes(element.value))) { acc.push({ ...obj }); } } }); return acc; }, []);Usando Array#filter y Array#every , obtenga la lista de perros que cumplen con los filtros
const filters = [ { "id": "breed", "value": "bulldog" }, { "id": "owner", "value": "Kevin" } ], dogs = [ { "name": "Zephyr", "breed": "bulldog", "owner":"Kevin" }, { "name": "Dude", "breed": "labradoodle", "owner":"Lance" }, { "name": "Mark", "breed": "yorkie", "owner":"Rob" }, { "name": "Cheddar", "breed": "bulldog", "owner":"Kevin" } ]; const filteredDogs = dogs.filter(dog => filters.every(({ id, value }) => dog[id] === value) ); console.log(filteredDogs);Aquí está tu respuesta:
const result = dogs.filter(dog => { return filters.every(filter => dog[filter.id] == filter.value) })Fragmento de código
const filters = [ { "id": "breed", "value": "bulldog" }, { "id": "owner", "value": "Kevin" } ] const dogs = [ { "name": "Zephyr", "breed": "bulldog", "owner":"Kevin" }, { "name": "Dude", "breed": "labradoodle", "owner":"Lance" }, { "name": "Mark", "breed": "yorkie", "owner":"Rob" }, { "name": "Cheddar", "breed": "bulldog", "owner":"Kevin" }, ]; const result = dogs.filter((dog)=> { return filters.every((filter)=> dog[filter.id] == filter.value) }) console.log(result)