Javascript优化-从列表中找到ID,并将其映射到Tree

时间:2020-07-21 07:27:55

标签: javascript typescript optimization tree dry

我有一个树数据,其接口定义如下:

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);
          }
        }
      });
    });
  }

有没有一种方法可以更好地优化此逻辑?

谢谢!

1 个答案:

答案 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);
      }
    })