重构请求:试图找到更优化的方法来过滤应用多个过滤器的对象数组



试图通过另一个对象数组的属性过滤一个对象阵列:

我有的数据

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"
},
]

输出应该是这样的:

[{名称:";Cheddar";,品种:";"斗牛犬";,所有者:";Kevin";,},{名称:";Zephyr";,品种:";"斗牛犬";,所有者:";Kevin";,},];

但相反,我得到的只是:

[
{
"name": "Zephyr",
"breed": "bulldog",
"owner": "Kevin"
}
]

这就是我正在做的:

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;
}, []);

使用Array#filterArray#every,获得满足过滤器的狗的列表

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

这是您的ans:

const result = dogs.filter(dog => {
return filters.every(filter => dog[filter.id] == filter.value)
})

代码片段

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)

最新更新