我想构建一个过滤器,该过滤器根据存在的规则数量来过滤基于这些规则的对象对象。

我有一个这样的对象数组:

const myList = [
{name: 'Joe',
 sex: 'male',
 isStared: false,
},
{name: 'Ann',
 sex: 'female',
 isStared: true,
},
{name: 'Gil',
 sex: 'female',
 isStared: true,
},
]


我还有一个带有规则的对象,用户可以通过该对象指定,例如可以是:

const rules = {sex: 'male', isStared: 'false'}

我不想对其进行硬编码,以便专门检查sex === 'male'isStared === true

但是我想,如果规则更多,它会检查这些规则并仅返回那些例如是男性且被盯着的规则。

我现在所拥有的是一个硬编码的过滤器,但是如果规则发生变化,它将破坏:

myList.filter(friend => friend.sex === action.filterQuery.sex && friend.sex.isStared === action.filterQuery.sex)

任何想法如何实现这一目标?

谢谢。

最佳答案

您可以使用filterObject.entriesevery-



const myList = [
{name: 'Joe',
 sex: 'male',
 isStared: false,
},
{name: 'Ann',
 sex: 'female',
 isStared: true,
},
{name: 'Gil',
 sex: 'female',
 isStared: true,
},
]

const rules = {sex: 'male', isStared: false}  // !

const result =
  myList.filter(item =>
    Object.entries(rules).every(([ k, v ]) =>
      item[k] === v
    )
  )

console.log(result)
// [
//   {
//     "name": "Joe",
//     "sex": "male",
//     "isStared": false
//   }
// ]





!:请注意,'false'false不同。不要将布尔值用引号引起来。

关于javascript - 如何使用javascript动态过滤?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/61109894/

10-10 08:20