Arrays 遍历元素并返回数组的可观察值
我有一个Observable,其中用户有一个数组属性Posts[],我想遍历它,用中间值调用一个方法,然后返回一个Observable,结果对象作为数组 目前,我有以下代码可以使用:Arrays 遍历元素并返回数组的可观察值,arrays,angular,observable,rxjs5,Arrays,Angular,Observable,Rxjs5,我有一个Observable,其中用户有一个数组属性Posts[],我想遍历它,用中间值调用一个方法,然后返回一个Observable,结果对象作为数组 目前,我有以下代码可以使用: public ngOnInit() { const results: any[] = []; this.controlData$ = this.controlContent$ .pipe( filter((input) => input !==
public ngOnInit() {
const results: any[] = [];
this.controlData$ = this.controlContent$
.pipe(
filter((input) => input !== null),
flatMap((p: IControlContentSection) => p.controlPerformers),
map((m: IControlPerformer) => {
results.push({
...m,
nextOccurrence: this.getNextControlDate(m.controlFrequency, m.firstOccurrence),
});
return results;
}),
takeUntil(this.destroy$),
);
}
我使用一个数组变量results:any[]
,但我不喜欢这个解决方案,因为它依赖于这个外部变量,使得它只在组件初始化时工作
我尝试在映射后使用toArray()
或reduce((x,y)=>x.concat(y),[])
,但这会在模板中解析为null
在不需要外部变量的情况下,我如何返回一个可观测值
在模板中,我通过异步管道订阅:
<div *ngIf="controlData$ | async as controllers">
...
<div *ngFor="let ctrl of controllers; trackBy:ctrl?.userId">
...
</div>
</div>
...
...
地图绘制完成后,如果操作正确,应该可以正常工作。但要模拟你的确切行为,你需要一个扫描操作符。当您返回结果数组时,扫描操作符将发出中间值。
你这样试过吗
public ngOnInit() {
this.controlData$ = this.controlContent$
.pipe(
filter((input) => input !== null),
flatMap((p: IControlContentSection) => p.controlPerformers),
map((m: IControlPerformer) => {
return {...m,
nextOccurrence: this.getNextControlDate(m.controlFrequency, m.firstOccurrence),
};
}),
scan((acc, cur) => [...acc, cur], [])
takeUntil(this.destroy$),
);
}
如果不行的话,我可以给你一个打劫器
希望这能有所帮助。谢谢Llorence,使用扫描确实有效,返回阵列的可见光。