網站搜尋

angular - 在從 API 映射資料時忽略 Typescript 的大小寫


我有以下來自我的 API 的 JSON 範例:

{"Name":"John","Address":"New Town"...} - 所以像 Name 和 Address 這樣的屬性都是以大寫字母開頭的。

我嘗試將返回值設置到下面的 DTO 中,但它不起作用。然而,如果我將 name 改為 Name,address 改為 Address,它就能正常工作。根據我的編碼規範,我必須使用駝峰命名。有沒有辦法在映射時忽略大小寫?

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

這是我如何進行映射的方式:

employeeResults: Employees[] = [];

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

答案#1

你可以這樣使用地圖:

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

答案#2

由於 JS 是區分大小寫的,我建議使用一些輔助函數,這些函數可以透過不區分大小寫的方式獲取物件的屬性。

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

然後你可以將服務的結果對應到你的介面:

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