我有两个Observable<MyType>
的可观察数组类型
export interface MyType{
title: string;
id: string;
other: [];
}
我想向第一个数组添加其他属性exists
,如果第二个数组中存在该项,则将其设置为true
const combined$ = combineLatest(this.first$, this.second$);
this.output$ = combined.pipe(
map((x, y) => {
return x.map(a => {
a.title = a.title;
a.id = a.id;
a.other = a.other;
a.exists = y.find(b => b.id === a.id )
});
})
);
如果订阅[...undefined]
可观察的output
,则始终获得this.output$.subscribe(console.log);
的结果
有什么办法解决吗?
答案 0 :(得分:2)
我认为Combine发送一个值,该值是单个值的数组。在这里y
是不确定的。
使用([x,y])分解map中的值,然后重试。
组合的$也有一个错字,您错过了。
并且find
可以替换为some
,以更好地表示逻辑并返回布尔值
此外,当您使用x.map
时,还会在逻辑上映射错误的数组。
const combined$ = combineLatest(this.first$, this.second$);
this.output$ = combined$.pipe(
map(([x, y]) => {
return x.map(a => {
a.title = a.title;
a.id = a.id;
a.other = a.other;
a.exists = y.some(b => b.id === a.id )
});
})
);
答案 1 :(得分:2)
在您的代码段中,您有一个错字,您可以将CombinedLatest rxjs运算符的结果设置为combined$
,然后在下一行将其称为combined
,我认为这是不正确的,或者仅仅是将此问题转换为SO时发生翻译错误。 (无论如何,必须指出,呵呵)
接下来,combineLatest
运算符将返回所有可观察值的数组。这样,您可以在map
运算符中使用解构轻松地从所有可观察对象中获取最新值。
下面是最终代码:
const combined$ = combineLatest(this.first$, this.second$);
this.output$ = combined.pipe(
map(([x, y]) => {
return x.map(a => {
a.title = a.title;
a.id = a.id;
a.other = a.other;
a.exists = y.find(b => b.id === a.id )
});
})
);
在原始代码中,您实际上是将值的数组传递为x
。
答案 2 :(得分:2)