gpt4 book ai didi

javascript - Array map 和 rxjs map 有什么区别

转载 作者:搜寻专家 更新时间:2023-11-01 05:19:29 24 4
gpt4 key购买 nike

我想知道 rxjs 和 array 上的映射是如何以相同的方式工作的。 array map 方法和 rxjs map operator 的用法有什么区别?

最佳答案

Array.map 转换单个数组的每个元素

console.log( [ 1, 2, 3 ].map(x => x * x) )
// log: [ 1, 4, 9 ]

总的来说,RXJS Observables 更像是一个数据流,但每个数据都是它自己的实体。

您可以选择将数组存储在您的 Observable 中,但每个数组仍然被视为单个实体。每次调用 Subject#next 时,您都会提供一个全新的数组。在这种情况下,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 - Array map 和 rxjs map 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52753739/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com