我有一群人:
let people = [{
name: 'John',
sex: 'M',
hasHouse: 'Yes',
hasCar: 'Yes'
},
{
name: 'Carl',
sex: 'M',
hasHouse: 'No',
hasCar: 'No'
},
{
name: 'Lisa',
sex: 'F',
hasHouse: 'Yes',
hasCar: 'No'
},
{
name: 'Mary',
sex: 'F',
hasHouse: 'Yes',
hasCar: 'Yes'
},
{
name: 'David',
sex: 'M',
hasHouse: 'No',
hasCar: 'Yes'
}
]
Run Code Online (Sandbox Code Playgroud)
我需要能够基于一个、多个或所有属性过滤原始数组,例如,我可以为每个对象的每个属性设置一个变量
let filter = {name: 'sex',value: 'M'};
let filterTwo = {name: 'hasCar',value: 'Yes'};
let filterThree = {name: 'hasHouse',value: 'Yes'};
// The value would be changed by the user
Run Code Online (Sandbox Code Playgroud)
然后只需使用过滤器功能:
let filtered = people.filter(person => person[filter.name] === filter.value && person[filterTwo.name] === filterTwo.value && person[filterThree.name] === filterThree.value);
Run Code Online (Sandbox Code Playgroud)
问题是,如果您只想使用一个过滤器(过滤器将与未选择的过滤器中的 null 进行比较),则它不起作用。还有一个事实是,我觉得代码不够高效,可以做得更好。
您可以将过滤器放在一个数组中并使用.every:
let filters = [
{ name: "sex", value: "M" },
{ name: "hasCar", value: "Yes" },
{ name: "hasHouse", value: "Yes" },
];
people.filter(v => filters.every(f => v[f.name] === f.value));
Run Code Online (Sandbox Code Playgroud)
如果不想使用过滤器,可以将其从数组中取出。
| 归档时间: |
|
| 查看次数: |
42 次 |
| 最近记录: |