【问题标题】:Fix Typescript function outside of return修复返回之外的 Typescript 函数
【发布时间】:2021-10-11 02:42:58
【问题描述】:

我正在开发一个已经创建的 NodeJS 和 Typescript 项目,并且有一个功能我不太了解它是如何工作的,我不相信它做得很好。

该函数负责比较两个对象并提取仅在第一个对象中找到的信息,虽然我真的不知道如何。

函数的所有逻辑都在 return 内部,我想知道如何将其取出并以更易于理解的方式进行。

这是函数:

public async objectComparer(fstArr: any, secArr: any) {

      try {

          return Promise.resolve( (current: any) => {
              return (
                fstArr.filter((secArr: any) => {
                  return secArr.fileName == current.fileName;
                }).length == 0
              );
          });
          
      } catch (error) {
          return Promise.reject(error);
      }
      
    }

我递给他两个东西:

let obj1 = [ 
    { codCountry: 'CO', fileName: 'CO_SER.txt' },
    { codCountry: 'CO', fileName: 'CO_TES.txt' } ];

let obj2 = [ 
    { codCountry: 'CO', fileName: 'CO_SER.txt' },
    { codCountry: 'CO', fileName: 'CO_DAT.txt' } ];

我运行函数:

let onlyObj1 = obj1.filter(await this.objectComparer(obj2, obj1));

这就是它返回的内容:

let objReturn = [ { codCountry: 'CO', fileName: 'CO_TEST.csv' } ];

【问题讨论】:

    标签: node.js arrays typescript filter


    【解决方案1】:

    这是令人难以置信的扭曲代码。您的代码中的结果将是

    let objReturn = [ { codCountry: 'CO', fileName: 'CO_TES.csv' } ];
    

    不是

    let objReturn = [ { codCountry: 'CO', fileName: 'CO_TEST.csv' } ];
    

    (注意最后的 T 差异)。

    据我所知,不清楚这段代码的目的是什么。让我们假设它正在过滤第一个数组中存在但第二个数组中没有的对象。您可以通过以下步骤简化此操作:

    • 声明一个类型 Country 以真正使用 Typescript 功能:
    type Country = {
        codCountry: string, fileName: string
    }
    
    • 删除 async/await,因为在这种情况下您不需要它们

    • 用这种方式简化对象比较器:

    public presenceInFirstArrayButNotInSecond = (fstArr: Array<Country>, sndArr: Array<Country>) => {
            return fstArr.filter(
                fstElem => sndArr.filter(
                    sndElem => sndElem.fileName == fstElem.fileName
                ).length == 0
            );
        }
    

    然后这样称呼它:

    let onlyObj = this.filter(obj1, obj2);
    

    这应该会给你同样的结果

    let objReturn = [ { codCountry: 'CO', fileName: 'CO_TES.csv' } ];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-02-23
      • 2021-01-27
      • 1970-01-01
      • 2020-02-20
      • 1970-01-01
      • 1970-01-01
      • 2019-09-27
      相关资源
      最近更新 更多