RxJS sequenceEqual

2020-10-14 10:33 更新

使用可選的比較器函數(shù)按順序比較兩個可觀察值的所有值,并返回表示兩個序列是否相等的單個布爾值的可觀察值。

sequenceEqual<T>(compareTo: Observable<T>, comparator?: (a: T, b: T) => boolean): OperatorFunction<T, boolean>

參量

相比于 與源序列進(jìn)行比較的可觀察序列。
比較器 可選的。默認(rèn)值為undefined。可選功能,用于比較每個值對

returns

OperatorFunction<T, boolean>:一個布爾值的 Observable,它表示兩個 Observable 發(fā)出的值順序是否相等。

描述

按順序檢查兩個可觀察對象發(fā)出的所有值是否相等。

順序相等的大理石圖

sequenceEqual 訂閱兩個可觀察對象,并緩沖每個可觀察對象的傳入值。每當(dāng)可觀察到的任何一個發(fā)出一個值時,該值都會被緩沖,并且緩沖區(qū)會從下往上移動并進(jìn)行比較;如果任何值對不匹配,則返回的 observable 將發(fā)出 false并完成。如果其中一個可觀察物完成,操作員將等待另一個可觀察物完成;如果另一個可觀察對象在完成之前發(fā)出,則返回的可觀察對象將發(fā)出 false 并完成。如果一個可觀測對象永遠(yuǎn)不會完成或在其他完成之后發(fā)出,則返回的可觀測對象將永遠(yuǎn)不會完成。

找出 Konami 代碼是否匹配

import { from, fromEvent } from 'rxjs';
import { sequenceEqual, bufferCount, mergeMap, map } from 'rxjs/operators';


const codes = from([
  'ArrowUp',
  'ArrowUp',
  'ArrowDown',
  'ArrowDown',
  'ArrowLeft',
  'ArrowRight',
  'ArrowLeft',
  'ArrowRight',
  'KeyB',
  'KeyA',
  'Enter', // no start key, clearly.
]);


const keys = fromEvent(document, 'keyup').pipe(map(e => e.code));
const matches = keys.pipe(
  bufferCount(11, 1),
  mergeMap(
    last11 => from(last11).pipe(sequenceEqual(codes)),
  ),
);
matches.subscribe(matched => console.log('Successful cheat at Contra? ', matched));

也可以看看

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號