操作符可以說是RxJS中的重中之重。它就是之前文章說的pipeline中的函數(shù)。
操作符是純的,高階的函數(shù)碟嘴,永遠不會改變observable對象,而是返回一個新observable對象囊卜,同時也為了鏈式調(diào)用娜扇。
操作符同樣也是惰性求值的。
操作符有兩種類型栅组,實例的和靜態(tài)的雀瓢。前文出現(xiàn)過的from和of都屬于靜態(tài)類型(這里是面向?qū)ο蟮母拍?。
平時最常用的幾個操作符是map玉掸,filter以及reduce刃麸,這三個已經(jīng)被講爛了,我們這里就不講了司浪。我們講一下可以和reduce類似的一個操作符scan泊业。
在用到reduce的地方都可以直接用scan替換。我們知道reduce是個聚合操作断傲,最后返回一個值脱吱;而scan也是聚合操作,但它返回的是多個值认罩。這些值是聚合操作中的每一步的值箱蝠。如下圖:

scan操作符
take操作符:比如take(3),只需要3個事件垦垂;
first操作符:獲取事件流中的第一個事件宦搬;
last操作符:獲取事件流中的最后一個事件;
以上三個操作符都可以歸為過濾類型的操作符劫拗。
do操作符:這是一個工具類型的操作符间校,它的作用是方便我們進行debug和跟蹤數(shù)據(jù)變化。你可以用它做任何操作页慷,一般都是有副作用的操作憔足,比如控制臺打印,寫入文件酒繁,修改DOM節(jié)點等等滓彰,但它不改變事件流中的事件。這在函數(shù)式編程稱為K combinator州袒,或者在一些庫中叫tap函數(shù)揭绑。