使用 Array.prototype.map() 更改数组中对象的 属性

Use Array.prototype.map() to change property of an object in an array

我为一个项目工作,我无法解决以下问题...

目标是翻译“resourceKeys”属性并按字母顺序对它们进行排序。

为此,对象数组中的每个 属性 都必须单独翻译。

代码:

const self = this;

    self._translateService.onLangChange.subscribe(() => {

      self.absenceTypes = self.absenceTypes.map((x) => self._translateService.instant(x.resourceKey));
      self.absenceTypes.sort((a, b) => a.resourceKey.localeCompare(b.resourceKey));
      
      console.log(self.absenceTypes);
    })

来源:

export const absenceTypes: ISelectItem[] = [
    { key: AbsenceType.Sickness, resourceKey: "AbsenceTypeSickness" },
    { key: AbsenceType.ParentalLeave, resourceKey: "AbsenceTypeParentalLeave" },
    { key: AbsenceType.ChildCare, resourceKey: "AbsenceTypeChildCare" },
    { key: AbsenceType.Vacation, resourceKey: "AbsenceTypeVacation" },
    { key: AbsenceType.LeaveOfAbsence, resourceKey: "AbsenceTypeLeaveOfAbsence" },
    { key: AbsenceType.UnpaidVacation, resourceKey: "AbsenceTypeUnpaidVacation" }
]

我希望控制台显示如下内容: { key: AbsenceType.Sickness, resourceKey: Sickness }

而不是从 map((x) => self._translateService.instant(x.resourceKey)); 我只从控制台得到:0: Sickness

有没有一种方法可以在更改(翻译)resourceKey 的同时保留对象的密钥?

使用扩展 (...) 运算符用更新的 resourceKey:

补充原始对象
map((x) => ({
    ...x, 
    resourceKey: self._translateService.instant(x.resourceKey)) 
  }));