我想知道rxjs和数组上的映射是一样的.数组映射方法和rxjs映射运算符的使用有何不同?
解决方法:
Array.map转换单个数组的每个元素.
console.log( [ 1, 2, 3 ].map(x => x * x) )
// log: [ 1, 4, 9 ]
通常,RXJS Observables更像是一个数据流,但每个数据都是它自己的实体.
您可以选择在Observable中存储数组,但仍然会将每个数组视为单个实体.每当你调用下一个主题#时,你就会提供一个全新的数组.在这种情况下,没有与使用RXJS的Array#push等效,因为RXJS并不关心Observable的内容恰好是一个数组.
// Observable that holds an array as its type
const subject: Subject<number[]> = new Subject<number[]>();
subject.pipe(
// the value here is a full array
map(arr => arr.map(x => x * x))
).subscribe(arr => console.log(arr));
subject.next([ 1, 2, 3 ]);
// log: [ 1, 4, 9 ]
subject.next([ 7, 8, 9 ]);
// log: [ 49, 64, 81 ]
*奖励:如果你设置一个ReplaySubject,你可以使某些行为更像一个数组. Subject的这个实现实际上重放了给它的所有数据(或者基于你如何实例化它的子集).正如您所看到的,对此的限制将是您只能推到最后,并且您必须创建一个新的订阅以查看整个“数组”,但它仍然是一个有趣的思想实验.
const subject: ReplaySubject<number> = new ReplaySubject<number>();
subject.next(1);
subject.next(2);
subject.next(3);
const transformed: Observable<number> = subject.pipe(
map(x => x * x)
);
transformed.pipe(first()).subscribe(x => console.log(x));
// log: 1
// log: 4
// log: 9
subject.next(9);
transformed.pipe(first()).subscribe(x => console.log(x));
// log: 1
// log: 4
// log: 9
// log: 81