包含

判斷 Observable 是否發射特定項目

將特定項目傳遞給 Contains 運算子,如果來源 Observable 發射該項目,它所回傳的 Observable 將會發射 true,如果來源 Observable 在沒有發射該項目的情況下終止,則會發射 false

一個相關的運算子 IsEmpty 會回傳一個 Observable,當且僅當來源 Observable 在沒有發射任何項目的情況下完成時,它才會發射 true。如果來源 Observable 發射了一個項目,它就會發射 false

另請參閱

特定語言資訊

待定

contains

RxGroovy 將此運算子實作為 contains。 預設情況下,它不會在任何特定的 Scheduler 上運作。

exists

RxGroovy 也實作了 exists 運算子。 它與 contains 類似,但會根據您提供的述詞函數測試來源 Observable 發射的項目,而不是測試它們是否與特定物件相同。 如果來源 Observable 發射一個滿足您的述詞函數的項目,從 exists 回傳的 Observable 將會回傳 true,如果它在沒有發射此類項目的情況下完成,則回傳 false

預設情況下,它不會在任何特定的 Scheduler 上運作。

isEmpty

RxGroovy 也實作了 isEmpty 運算子。 如果來源 Observable 發射一個項目,從 isEmpty 回傳的 Observable 將會回傳 false,如果它在沒有發射項目的情況下完成,則回傳 true

預設情況下,它不會在任何特定的 Scheduler 上運作。

contains

RxJava 將此運算子實作為 contains。 預設情況下,它不會在任何特定的 Scheduler 上運作。

exists

RxJava 也實作了 exists 運算子。 它與 contains 類似,但會根據您提供的述詞函數測試來源 Observable 發射的項目,而不是測試它們是否與特定物件相同。 如果來源 Observable 發射一個滿足您的述詞函數的項目,從 exists 回傳的 Observable 將會回傳 true,如果它在沒有發射此類項目的情況下完成,則回傳 false

預設情況下,它不會在任何特定的 Scheduler 上運作。

isEmpty

RxJava 也實作了 isEmpty 運算子。 如果來源 Observable 發射一個項目,從 isEmpty 回傳的 Observable 將會回傳 false,如果它在沒有發射項目的情況下完成,則回傳 true

預設情況下,它不會在任何特定的 Scheduler 上運作。

contains

RxJS 中的 contains 運算子接受一個可選的第二個參數:從來源 Observable 序列中開始搜尋該項目的從零開始的索引。

範例程式碼

/* Without an index */
var source = Rx.Observable.of(42)
  .contains(42);

var subscription = source.subscribe(
  function (x) { console.log('Next: %s', x); },
  function (err) { console.log('Error: %s', err); },
  function () { console.log('Completed'); });
Next: true
Completed
/* With an index */
var source = Rx.Observable.of(1,2,3)
  .contains(2, 1);

var subscription = source.subscribe(
  function (x) { console.log('Next: %s', x); },
  function (err) { console.log('Error: %s', err); },
  function () { console.log('Completed'); });
Next: true
Completed

contains 可以在下列發行版本中找到

  • rx.all.js
  • rx.all.compat.js
  • rx.aggregates.js

它需要下列其中一個發行版本

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js
indexOf

RxJS 中的 indexOf 運算子與 contains 類似,但它不是回傳一個發射 truefalse 的 Observable,而是回傳一個發射該項目在來源 Observable 序列中的索引的 Observable,如果沒有發射此類項目,則回傳 −1

indexOf 運算子接受一個可選的第二個參數:從來源 Observable 序列中開始搜尋該項目的從零開始的索引。 結果 Observable 發射的索引值將相對於此起點,而不是相對於序列的開頭。

範例程式碼

/* Without an index */
var source = Rx.Observable.of(42)
  .indexOf(42);

var subscription = source.subscribe(
  function (x) { console.log('Next: %s', x); },
  function (err) { console.log('Error: %s', err); },
  function () { console.log('Completed'); });
Next: 0 
Completed
/* With an index */
var source = Rx.Observable.of(1,2,3)
  .indexOf(2, 1);

var subscription = source.subscribe(
  function (x) { console.log('Next: %s', x); },
  function (err) { console.log('Error: %s', err); },
  function () { console.log('Completed'); });
Next: 0 
Completed

indexOf 可以在下列發行版本中找到

  • rx.all.js
  • rx.all.compat.js
  • rx.aggregates.js

它需要下列其中一個發行版本

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js
findIndex

RxJS 中的 findIndex 運算子將述詞函數作為其參數。 它會回傳一個 Observable,該 Observable 會發射單一數字 (來源 Observable 序列中第一個符合述詞的項目的從零開始的索引) 或 −1 (如果沒有項目符合)。

述詞函數接受三個參數

  • 來源 Observable 發射的項目
  • 該項目的從零開始的索引
  • 來源 Observable 本身

您也可以將物件傳遞給 findIndex 作為可選的第二個參數,該物件將可作為 “this” 提供給述詞函數。

範例程式碼

/* Found an element */
var array = [1,2,3,4];

var source = Rx.Observable.fromArray(array)
    .findIndex(function (x, i, obs) {
        return x === 1;
    });

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: 0
Completed
/* Not found */
var array = [1,2,3,4];

var source = Rx.Observable.fromArray(array)
    .findIndex(function (x, i, obs) {
        return x === 5;
    });

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: -1
Completed

findIndex 可以在下列發行版本中找到

  • rx.all.js
  • rx.all.compat.js
  • rx.aggregates.js

它需要下列其中一個發行版本

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js
isEmpty

RxJS 也實作了 isEmpty 運算子。 如果來源 Observable 發射一個項目,從 isEmpty 回傳的 Observable 將會回傳 false,如果它在沒有發射項目的情況下完成,則回傳 true

範例程式碼

/* Not empty */
var source = Rx.Observable.range(0, 5)
    .isEmpty()

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: false
Completed
/* Empty */
var source = Rx.Observable.empty()
    .isEmpty()

var subscription = source.subscribe(
    function (x) { console.log('Next: ' + x); },
    function (err) { console.log('Error: ' + err); },
    function () { console.log('Completed'); });
Next: true
Completed

isEmpty 可以在下列發行版本中找到

  • rx.all.js
  • rx.all.compat.js
  • rx.aggregates.js

它需要下列其中一個發行版本

  • rx.js
  • rx.compat.js
  • rx.lite.js
  • rx.lite.compat.js

RxPHP 將此運算子實作為 isEmpty

如果來源 Observable 為空,它會回傳一個發射 true 的 Observable,否則會發射 false。

範例程式碼

//from https://github.com/ReactiveX/RxPHP/blob/master/demo/isEmpty/isEmpty.php

$source = \Rx\Observable::emptyObservable()
    ->isEmpty();

$source->subscribe($stdoutObserver);

   
Next value: 1
Complete!
    
//from https://github.com/ReactiveX/RxPHP/blob/master/demo/isEmpty/isEmpty-false.php

$source = \Rx\Observable::just(1)
    ->isEmpty();

$source->subscribe($stdoutObserver);

   
Next value: 0
Complete!