如果有人可以帮助我,将不胜感激:)。 我一直在为typescript的语法而苦苦挣扎(这里是初学者)。
我需要重构此代码,以便获得serviceBranches的完整列表。 正确地进行了一些过滤和映射,并且从我们的API返回了一个serviceBranch。 我已经尝试删除一些过滤器,但可能不是正确的过滤器。 有人可以帮助我获取所有serviceBranches(以便按顺序删除正确的过滤器)。
谢谢。
public async personNews(serviceBranch?: string[]): Promise<INews> {
const fetchResult: IPersonNewsFetchResultEntry[] = await this._get('api/person/news/', newsSchema, true) as IPersonNewsFetchResultEntry[];
const serviceBranches: string[] = (serviceBranch !== undefined ? serviceBranch : fetchResult.filter((entry: IPersonNewsFetchResultEntry, index: number, array: IPersonNewsFetchResultEntry[]): boolean => {
return entry.niveauID === NewsLevel.ServiceBranch && array.findIndex((value: IPersonNewsFetchResultEntry): boolean => {
return entry.unitID === value.unitID;
}) === index;
}).map((entry: IPersonNewsFetchResultEntry): string => {
return entry.unitID;
}));
答案 0 :(得分:0)
这是一个非常密集的功能,对于人类来说,解析和理解它非常困难。因此,让其格式更好:
public async personNews(serviceBranch?: string[]): Promise<INews> {
const fetchResult: IPersonNewsFetchResultEntry[] = (await this._get(
'api/person/news/',
newsSchema,
true,
)) as IPersonNewsFetchResultEntry[]
const serviceBranches: string[] =
serviceBranch !== undefined
? serviceBranch
: fetchResult
.filter(
(
entry: IPersonNewsFetchResultEntry,
index: number,
array: IPersonNewsFetchResultEntry[],
): boolean => {
return (
entry.niveauID === NewsLevel.ServiceBranch &&
array.findIndex(
(value: IPersonNewsFetchResultEntry): boolean => {
return entry.unitID === value.unitID
},
) === index
)
},
)
.map((entry: IPersonNewsFetchResultEntry): string => {
return entry.unitID
})
现在很明显,首先过滤fetchResult
以删除某些项目,然后将这些项目映射到仅返回其unitID
的地方。
从您的问题中很难知道您想要什么逻辑或数据看起来像什么。但是,如果要获得 all 结果,则可以完全删除filter()
调用。如果要返回整个对象而不是仅返回unitID
,请完全删除map()
调用。如果要使用其他过滤逻辑,请更改该filter
的内部逻辑。
答案 1 :(得分:0)
所有东西都有显式类型吗?
是因为this._get('api/person/news/', newsSchema, true);
返回了any
吗?
稍作重构并删除类型后,就会更加清楚
public async personNews(serviceBranch?: string[]): Promise<INews> {
const fetchResult = await this._get('api/person/news/', newsSchema, true);
let serviceBranches: string[] = [];
if(serviceBranch) {
serviceBranches = serviceBranch;
return;
}
serviceBranches = fetchResult.filter((entry, index, array) => {
return entry.niveauID === NewsLevel.ServiceBranch
&& array.findIndex(({unitID}) => entry.unitID === unitID) === index;
}).map(entry => entry.unitID)
}