我试图过滤一个通过动态过滤器的数组,但我有点卡住了。
const data = [
{id: 1, name: 'john', location: 'NY', age: '50'},
{id: 2, name: 'mj', location: 'LA', age: '41'},
{id: 3, name: 'mike', location: 'LA', age: '50'},
{id: 4, name: 'lebron', location: 'SF', age: '20'},
{id: 5, name: 'mike', location: 'NY', age: '60'},
{id: 6, name: 'john', location: 'MI', age: '30'},
{id: 7, name: 'mj', location: 'NY', age: '53'}
]
我有我的过滤器
const filters = {
name: ['mike', 'mj'],
location: ['NY'],
age: []
}
我试着像这个一样过滤
const searchKeys = Object.values(selectedVehiclesFilters)
.filter((xyz: any) => [...xyz])
.flat() // <- this will return me ['mike', 'mj', 'NY']
Object.entries(selectedVehiclesFilters).map(([key, values]) => {
const keyName = stringToCamelCase(key)
const abc = filteredRows.filter((vehicle: Data) => {
return searchKeys.every((searchKey) =>
vehicle[`${keyName as string}`].includes(searchKey),
)
})
}),
有什么建议我应该怎么做吗?预期结果将在附近
abc: [
{ id: 7, name: 'mj', location: 'NY', age: '53'},
{ id: 5, name: 'mike', location: 'NY', age: '60'}
]
我不认为平坦化过滤器是正确的想法,因为那样你就会混合不同的属性。相反,在过滤器对象上迭代,并使项目通过测试,如果,对于每个过滤器属性:
- 过滤器为空,或者
- 过滤器数组中存在与正在迭代的对象相同的属性
const data = [
{id: 1, name: 'john', location: 'NY', age: '50'},
{id: 2, name: 'mj', location: 'LA', age: '41'},
{id: 3, name: 'mike', location: 'LA', age: '50'},
{id: 4, name: 'lebron', location: 'SF', age: '20'},
{id: 5, name: 'mike', location: 'NY', age: '60'},
{id: 6, name: 'john', location: 'MI', age: '30'},
{id: 7, name: 'mj', location: 'NY', age: '53'}
];
const filters = {
name: ['mike', 'mj'],
location: ['NY'],
age: []
};
const filtered = data.filter(obj =>
Object.entries(filters).every(([key, filterArr]) => (
filterArr.length === 0 || filterArr.includes(obj[key])
))
);
console.log(filtered);