【rxjs 5.x】filter操作子

6165 ワード

rxjs 5.x filter操作子api
debounce
ジッタを防ぐには、もう一つのObservableが値を送信するときのみ、ソースObervableの最新データを取って送信し、他のデータは送信をキャンセルする.
//     ,              ,          
Rx.Observable.interval( 1000 )
    .debounce(( ) => Rx.Observable.fromEvent(document, 'click'))
    .subscribe(x => console.log( x ));
debounceTime
ジッタを防いで、しばらくの時間の内に、最新のデータだけを取って発射して、その他のデータは発射をキャンセルします.
//     ,         
Rx.Observable.interval( 1000 )
    .debounceTime( 500 )
    .subscribe(x => console.log( x ))
distinct
重複した値を削除
//       ,  A,B,C,b
Rx.Observable.of('A', 'B', 'C', 'A', 'b', 'B')
    .distinct( )
    .subscribe( x => console.log( x ))
distinct Unitil Changd
連続して繰り返した値を削除します.
//          ,  A,B,A,B,A
Rx.Observable.of('A', 'B', 'B', 'A', 'B', 'A', 'A')
    .distinctUntilChanged( )
    .subscribe( x => console.log( x ))
distinctKeyUnitil Changd
連続したもののうち、同じkey値を与えるvalueのものを除く.
let items = [
    { age: 4, name: 'Foo'},
    { age: 7, name: 'Bar'},
    { age: 5, name: 'Foo'},
    { age: 6, name: 'Foo'}
]
Rx.Observable.of( ...items )
    .distinctUntilKeyChanged('name') 
    .subscribe( x => console.log( x ))

//   
//  { age: 4, name: 'Foo'}
//  { age: 7, name: 'Bar'}
//  { age: 5, name: 'Foo'}
ElemenntAt
指定された位置の要素のみを送信します.
//    0  ,   ‘A’
Rx.Observable.of('A', 'B', 'B', 'A', 'B', 'A', 'A')
    .elementAt( 3 )
    .subscribe( x => console.log( x ))
Filter
カスタムフィルタルールは、該当する値を送信します.
//     :1,2,5,7,9,1
Rx.Observable.of(1,3,2,5,4,7,6,9,1)
    .filter( x => x % 2 !== 0 )
    .subscribe( x => console.log( x ))
ファースト
最初の要素だけを出力します.
//         ,  :1
Rx.Observable.of(1,3,2,5,4,7,6,9,1)
    .first( )
    .subscribe( x => console.log( x ))
ignoreelement
すべての値を無視して、一つも送信しません.
//      
Rx.Observable.of(1,3,2,5,4,7,6,9,1)
    .ignoreElements( )
    .subscribe( x => console.log( x ))
audit、audiit Time
auditは、他のObservableが送信される前に、ソースObservableの値が無視され、他方のObservableが送信されるときに、ソースObservableから最新の値を送信し、上記の処理を繰り返す.
audiitTimeは、指定待ち時間内にソースObservableの値が無視され、終了後にソースObservableの最新値を送信し、上記の手順を繰り返す.
彼らとthrottleの違いは、最初の値の送信は、先に再送信を待つことであり、throttleは最初の値を発射してから待つことである.
// auditTime
//   2,5,8,11,13...
Rx.Observable.interval( 1000 )
    .auditTime( 2000 )
    .subscribe( x => console.log( x ))
last
ソースデータセットの最後の項目を返します.
//         ,  :5
Rx.Observable.of(1,2,3,4,5)
    .last( )
    .subscribe( x => console.log( x ))
sample
他のObservableが値を送信するとき、ソースObservableデータセットから最新の値を送信する.
//                
Rx.Observable.interval( 1000 )
    .sample( Rx.Observable.fromEvent( document, 'click' ))
    .subscribe( x => console.log( x ))
sampleTime
一定の時間間隔おきに、ソースObservableデータセットの最新値を送信する.
//   2 ,     0,2,4,6,8....
Rx.Observable.interval( 1000 )
   .sampleTime( 2000 )
   .subscribe( x => console.log( x ))
single
ソースObservableのデータセットが一つのデータ項目だけであれば、その項目を出力します.一つ以上のデータがあるとエラーが発生します.
//    1
Rx.Observable.of( 1 )
    .single( )
    .subscribe( x => console.log( x ))
skyp
ソースObservableのデータセットのn個のデータをスキップして、値を送信します.
//     2 ,  3,4
Rx.Observable.of(1,2,3,4)
    .skip( 2 )
    .subscribe( x => console.log( x ))
skyip Unitil
ソースObservableの先頭の一連の値を無視して、別のObservableが送信値を開始するまで、ソースObservableから値を送信することができる.
// 3  ,          ,  :2,3,4,5,6.....
Rx.Observable.interval( 1000 )
    .skipUntil( Rx.Observable.of( 1 ).delay( 3000 ))
    .subscribe( x => console.log( x ))
スカイプWhile
ソースObservableの最初の一連の値を無視して、条件に合致するものがあるまで、ソースObservableのこの値から開始し、値の送信を開始する.
//   4,5,3,2,1
Rx.Observable.of( 1, 2, 3, 4, 5, 3, 2, 1)
    .skipWhile( x => x < 4 )
    .subscribe( x => console.log( x ))
    、take

      Obervable     ,  n        ,          。

//     :0,1,2    
Rx.Observable.interval( 1000 )
    .take( 3 )
    .subscribe( x => console.log( x ))
タカ
Observableオブジェクトが発行する前のn項目の値を取得するためには、取り終わったら終了します.
var source = Rx.Observable.interval(1000);
var example = source.take(3);

example.subscribe({
    next: (value) => { console.log(value); },
    error: (err) => { console.log('Error: ' + err); },
    complete: () => { console.log('complete'); }
});
例のマーブル:
source : -----0-----1-----2-----3--..
                take(3)
example: -----0-----1-----2|
以上のコードを実行した後、コンソールの出力結果:
0
1
2
complete
TaeLast
ソースObervableの逆数から最初の前方数までn個のデータを入手して送信します.先頭からのデータ項目は無視されます.
//   5,6,7
Rx.Observable.of( 1,2,3,4,5,6,7 )
    .takeLast( 3 )
    .subscribe( x => console.log( x ))
タカタUtil
ソースObservableデータセットの第1項から送信が開始され、他のObservableが最初の値の送信を開始するまでソースObservableは送信値を停止する.
// 3           
Rx.Observable.interval( 1000 )
    .takeUntil( Rx.Observable.of( 1 ).delay( 3000 ))
    .subscribe( x => console.log( x ))
たかみWhile
ソースObservableデータセットの最初のデータ項目から、条件に合致する最初のデータ項目に出会うまで、ソースObservableデータセットの送信を停止する.
//   :1,2,3
Rx.Observable.of( 1,2,3,4,3,2,1)
    .takeWhile( x => x < 4 )
    .subscribe( x => console.log( x ))
スロットル
ソースObservableデータセットがデータ項目を送信するたびに、別のObservable送信値を待っています.待ち時間にソースObservableの値は無視されて送信されません.他のObservableが値を送信したときにソースObservableの最新値を送信します.
//   0,3,6,9,12.....
//        ,       ,      
Rx.Observable.interval( 1000 )
    .throttle( x => Rx.Observable.interval( 2000 ))
    .subscribe( x => console.log( x ))
throttle Time
ソースObservableのデータセットが一つのデータ項目を送信するたびに、n秒を待って、n秒後にソースObservableの最新値を出力します.
//   0,3,6,9,12.....
Rx.Observable.interval( 1000 )
    .throttleTime( 2000 )
    .subscribe( x => console.log( x ))