我有一个树数据,其接口定义如下:
interface IData {
id: string;
label: string; .
value: string;
expanded: boolean;
condition?: boolean;
dataState: 'SUCCESS';
locked: boolean;
enabled: boolean;
parent: string;
children: IData[];
}
而且我有以下界面的错误列表:-
interface IErrors {
id: string;
success: boolean;
errors: Array<IError>;
}
如果要在IData []上找到任何error.id,我想遍历这些错误并将'dataState'应用于'FAILED',即,如果该节点的'dataState'属性更改为'FAILURE',数据ID与错误ID列表中的数据ID匹配。
我编写了以下逻辑,但是执行它需要2秒钟(请通过console.time检查)。
public setFailedDataToStatusFailed(data:IData[],errorsList:IErrors[]){
data.forEach(data => {
errorsList.forEach(error => {
if(data){
if(data.id === error.id){
data.ruleState = 'FAILURE';
return;
} else if(data.children){
this.setFailedRulesToStatusFailed(data.children,errorsList);
}
}
});
});
}
有没有一种方法可以更好地优化此逻辑?
谢谢!
答案 0 :(得分:0)
data.map(d => {
if(errorsList.findIndex( err => err.id === d.id )){
data.ruleState = 'FAILURE';
return;
}
if(d.children){
this.setFailedRulesToStatusFailed(data.children,errorsList);
}
})