Angular 使用rxjs中的Object.assign和combinedLatestest返回新值

Angular 使用rxjs中的Object.assign和combinedLatestest返回新值,angular,angular8,rxjs-pipeable-operators,Angular,Angular8,Rxjs Pipeable Operators,因此,我尝试向itemAlarms observables数组中的对象添加一个附加属性。 这是itemsAlarm数组中的一个对象: { "id": "1", "healthType": "warning", "createdOn": "2020-03-11T05:47:14.38Z", "module": "00100", "version": "0", "index": 14 } 我正在尝试对其进行转换,以便在数组的每个对象中添加此附加属性:

因此,我尝试向itemAlarms observables数组中的对象添加一个附加属性。 这是itemsAlarm数组中的一个对象:

{
    "id": "1",
    "healthType": "warning",
    "createdOn": "2020-03-11T05:47:14.38Z",
    "module": "00100",
    "version": "0",
    "index": 14
}
我正在尝试对其进行转换,以便在数组的每个对象中添加此附加属性:

{
    "id": "1",
    "itemsTypeId": "23",
    "healthType": "warning",
    "createdOn": "2020-03-11T05:47:14.38Z",
    "module": "00100",
    "version": "0",
    "index": 14
}
这两个观察对象都有一个相同的Id,这就是我如何找到itemTypeId将其合并到itemAlarms对象中的方法。 items具有id,itemsAlarms具有具有primary和fk关系的itemId

  this.items$ = this.itemsService.getEntities();
    this.itemsAlarms$ = this.itemsAlarmsEntityService.getEntities();

this.itemsAlarms$ = combineLatest([this.items$, this.itemsAlarms$]).pipe(
  map(([items, itemsAlarms]) => {
    itemsAlarms.forEach(alarm =>
      Object.assign({ itemId: items.find(item => item.id === alarm.Itemid).itemTypeId}, itemsAlarms)
    );
    return itemsAlarms;
  })
);
我原以为itemsAlarm将是新传输的数组,但它是原始数组的精确结果。我觉得我做错了一件小事

这是我正在尝试做的一个示例,但是没有zip,因为我不断收到邮件,所以不推荐使用:

forEach
转换为
map
,并添加
返回对象。分配…
两个输入可观察数组或可观察序列也是如此?当我映射([items,itemsAlarms])=>itemsAlarms)、map(报警=>Object.assign({itemId:items.find(item=>item.id===alarm.item==alarm.id.)、itemTypeId},itemsAlarms))时,我不在范围之内我收到一个错误,表示无法访问项目:(@Z.Bagleyobservables sequences我相信。我从一个API获取数据,并返回一个对象数组。如果您可以创建一个StackBlitz示例,它会更容易提供帮助。这可能是因为您的rxjs管道映射中没有定义
项salarms
。为了确保它们都可用,您可以创建一个if-statement并仅在两者都存在时运行代码:
if(!!items&&!!itemsAlarms){itemsAlarms.forEach…}