我对可观察者来说很新,这对其他人来说可能是一个愚蠢的问题,但我无法找到办法。我该如何转换?
Observable<Array<T>>
其中T
是一个TypeScript类,其属性Id(string)
为Array<string>
?我想将Id
属性转换为字符串数组。
答案 0 :(得分:1)
你正在尝试做两件事:
T
T
的每个实例映射到Id
属性您可以使用mergeAll
展平observable,就像在普通JS数组上使用reduce
一样。
const source = Rx.Observable.of(
[{ Id: '1' }, { Id: '2' }],
[{ Id: '3' }, { Id: '4' }]
);
const flattened = source.mergeAll();
flattened.subscribe(s => console.log(s));
// => {Id:'1'}, {Id:'2'}, {Id:'3'}, {Id:'4'}
然后,您可以使用map
(与普通的JS数组一样)来提取Id
属性
const mapped = flattened.map(s => s.Id);
mapped.subscribe(s => console.log(s))
// => '1', '2', '3', '4'
将所有内容全部转换为1条陈述......
source
.mergeAll()
.map(s => s.Id)
.subscribe(s => console.log(s))
// => '1', '2', '3', '4'
答案 1 :(得分:0)
你可以在javascript数组上使用类似的reduce运算符。 RxJS reduce操作符将在完成后对整个流进行操作。
参见示例:
let data$ = new Rx.Subject();
data$
.reduce((acc, el) => {acc.push(...el); return acc;}, [])
.subscribe(x=>console.log(x));
data$.next([{id:'1'}, {id:'2'}]);
data$.next([{id:'3'}, {id:'4'}]);
data$.complete();