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
)
);
});
