从APIMap数据时忽略 typescript 中的大小写

noj0wjuj  于 2023-01-31  发布在  TypeScript
关注(0)|答案(2)|浏览(157)

下面是我的API中的json示例:
{“Name”:“John”,“Address”:“New Town”...} -因此,像Name和Address这样的属性都以大写字母开头。
我试图将返回值设置到下面的dto中,但它不起作用。然而,如果我将名称更改为Name,将地址更改为Address,它就起作用了。根据我的编码约定,我必须使用驼峰式大小写。有没有办法在Map中忽略大小写?

export interface Employees{
    name: string;
    address: string;
}

下面是我如何进行Map:

employeeResults: Employees[] = [];

this.employeeService.getEmployeeResults().subscribe((employee: Employees[]) => {
  this.employeeResults= hotels;
})
q9yhzks0

q9yhzks01#

你可以像这样使用map:

this.employeeService.getEmployeeResults().subscribe((employees: any[]) => {
 let mappedEmpeloyees = employees.map( (e) => {return {name: e.Name,address:e.Address};})
  this.employeeResults=  mappedEmpeloyees;
})
9jyewag0

9jyewag02#

由于JS是大小写敏感的,我建议使用一些帮助函数,它可以通过键以一种不敏感的方式获得对象的属性。

const getPopertyByKey = (obj, key) => obj[Object.keys(obj).find(k => k.toLowerCase() === key.toLowerCase())];

然后,您可以将服务的结果Map到接口:

employeeResults: Employees[] = [];
    
    this.employeeService.getEmployeeResults()
        .subscribe((employees: Employees[]) => {
            this.employeeResults = employees
                .map((e: Employees) => (
                    {
                        name: getPopertyByKey(e, 'nAmE'),
                        address: getPopertyByKey(e, 'AdDrEsS')
                    } as Employees
                )
            );
    });

相关问题