node.js - 修复返回之外的 Typescript 函数
问题描述
我正在开发一个已经创建的 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' } ];
解决方案
这是令人难以置信的扭曲代码。您的代码中的结果将是
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' } ];
推荐阅读
- r - 将特定列更改为 R 中的因子
- vba - 关闭 Shell.Application 实例
- angular - 是否可以重新生成使用 ng build --prod 构建的代码?
- python-3.x - 用 Python 和 BeautifulSoup 抓取网页,发现错误
- django - 我想在 django 中将用户活动添加到数据库
- javascript - Angular - 如何最小化相同的代码使用?
- javascript - 无论大小如何调整我的画布大小以适应相同的内容
- python - 如何将当前url中的参数传递给Django 3中的html模板
- python - IndexError:列表索引超出范围(将地址转换为地理坐标的 Python 程序
- python-3.x - 使用 python 和 bs4 获取 url 中短语的计数