Dhi*_*iru 4 javascript arrays rxjs
我想知道rxjs和array上的映射是如何工作的。数组映射方法和rxjs映射运算符的用法之间有什么区别?
Array.map转换单个数组的每个元素。
console.log( [ 1, 2, 3 ].map(x => x * x) )
// log: [ 1, 4, 9 ]
Run Code Online (Sandbox Code Playgroud)
通常,RXJS Observables更像是数据流,但是每个数据都是其自己的实体。
您可以选择将数组存储在Observable中,但是仍然将每个数组视为单个实体。每次调用时Subject#next,您都在提供一个全新的数组。在这种情况下,Array#pushRXJS并不等效,因为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 ]
Run Code Online (Sandbox Code Playgroud)
*优点:您可以还挺使一些行为更像是一个数组,如果你设置了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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
955 次 |
| 最近记录: |