javascript – Array map和rxjs map之间有什么区别

我想知道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
上一篇:javascript – 为什么我的rxjs仅组合最新输出2次?


下一篇:javascript – Angular2路由保护返回Observable,如何处理错误