我想构建一个过滤器,该过滤器根据存在的规则数量来过滤基于这些规则的对象对象。
我有一个这样的对象数组:
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)
任何想法如何实现这一目标?
谢谢。
最佳答案
您可以使用filter
,Object.entries
和every
-
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/