javascript - 按对象数组过滤对象数组 [TypeScript] [ES6]
问题描述
如何通过具有条件的对象数组过滤对象数组。
接口:
interface Person {
age: number;
available: boolean;
}
interface PersonFilter {
predicateFn(arg: Person): boolean;
}
数据:
const persons = [
{
"age": 2,
"available": false
},
{
"age": 5,
"available": true
}
];
过滤条件:
const filters = [
{predicateFn: person => person.available},
{predicateFn: people => person.age > 2}
];
如何使用当前过滤器结构过滤这个对象数组?
function getFilteredPersons(filters): Person[]{
return persons.filter( ?? );
}
预期输出:
[
{
"age": 5,
"available": true
}
]
解决方案
你可以试试这个Array.prototype.every
函数,它会是这样的:
const persons = [{
age: 2,
available: false
},
{
age: 5,
available: true
}
];
const filters = [{
predicateFn: person => person.available
},
{
predicateFn: person => person.age > 2
}
];
function getFilteredPersons(filters) {
return persons.filter(p => filters.every(filter => filter.predicateFn(p)));
}
console.log(getFilteredPersons(filters));
推荐阅读
- android - 未调用 Android onNewIntent
- databricks - 将数据写入 Azure 数据块中的 Delta Lake 时出现问题(检测到不兼容的格式)
- angularjs - 表单 $dirty 在 typeahead 选择时为假
- typescript - 是否可以将 Lerna 用于在 api 边界上使用 rxjs(例如)的多个打字稿项目?
- python - 使用 TensorFlow 的对象检测 API
- javascript - 如何构建对 API 的异步调用?
- printing - 如何在python3中创建打印对话框
- swift - tableView 内的 collectionView 在滚动时返回到第一个索引
- javascript - 将构造函数中的默认值设置为未定义是一种好习惯吗?
- python - 如何通过标记现有数据框的内容来创建新的数据框?