我有一个数组,其中包含要根据作为参数传递的不确定条件数进行过滤的对象。
这是我用hide()中的条件数组过滤数组a的方法
const statuses = [
{
id: 0,
name: 'archived'
},
{
id: 1,
name: 'coming',
hide: (...filterParam) => filterParam.every(rule => rule)
}
];
const filteredStatuses = statuses.filter(element => {
switch (element.id) {
case 1:
return !element.hide(this.isTopTabs());
// other cases with others logic
default:
return true;
}
});
现在,如果每个对象都可以有自己的子对象数组,如下所示:
const statuses = [
{
id: 'statuses',
name: 'treeName',
children: [
{
id: 1,
name: 'inProgress',
hide: (...filterParam) => filterParam.every(Boolean)
},
{
id: 2,
name: 'coming',
checked: false,
hide: (...filterParam) => filterParam.every(Boolean)
}
]
}
];
如何以相同的方式递归迭代?
您是否有更好的方法通过避免切换/大小写来动态过滤此数组?
最后,如何使用诸如<T>(...filterParam: Array<T>) => filterParam.every(Boolean)
之类的通用类型键入其余参数?
答案 0 :(得分:0)
如何以相同的方式递归迭代?
const filterRecursively = elements => filterStatuses(elements).map(it => ({ ...it, children: it.children && filterRecursively(it.children) }));
您是否有更好的方法通过避免切换/大小写来动态过滤此数组?
为什么? switch
案例有什么问题?花式还不够吗?
最后是如何使用类似hide的泛型键入其余参数:(... filterParam:Array)=> filterParam.every(Boolean)吗?
<T>(...filterParam: Array<T>) => boolean