在其他选项数组中筛选具有多个条件的数组



我试图过滤一个通过动态过滤器的数组,但我有点卡住了。

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

最新更新