【发布时间】:2020-02-08 07:21:55
【问题描述】:
我有以下课程。我想将 filterOutEmails 函数转换为使用 array.some 而不是当前代码。
export class UsertableComponent {
dataSource: MatTableDataSource<TrialUser>;
createTableFromServer = (data: TrialUsers[], emailDomains:string) => {
this.dataSource = new MatTableDataSource(data);
this.dataSource.filterPredicate = this.filterOutEmails
}
filterOutEmails = (row: TrialUser, emailDomains: string): boolean => {
const listofFilters = emailDomains.split(',');
for (let i = 0; i < listofFilters.length; i++){
if (row.email.toLowerCase().includes(listofFilters[i].trim())){
return true;
};
}
return false;
}
}
我尝试执行以下操作,但它使this 为空,当我尝试使用箭头函数时,我无法通过行。 (如果我没有将this: TrialUser 设置为参数,那么“this”对应于Type UsertableComponent,即函数所在的类,即使我将row 作为thisObject 传递给some)
private determineIfRowShouldBeShown(this: TrialUser, domain: string): boolean {
const row: TrialUser = this;
return !row.email.toLowerCase().includes(domain.trim());
}
private filterOutEmails= (row: TrialUser, emailDomains: string): boolean {
const listofFilters = emailDomains.split(',');
return listofFilters.some(this.determineIfRowShouldBeShown, row) ;
}
}
将“determineIfRowSHouldBeShown”作为内联粗箭头函数是可行的,但我想将函数定义分开。
【问题讨论】:
-
该问题中的建议答案不适用于 typescript 和
some函数。
标签: arrays typescript functional-programming