RxJSを使用してアイテムのストリームを操作し、ストリーミングされたアイテムの配列を取得します

クリスチャン

私はrxjsに少し慣れていないので、この問題に頭を悩ませることはできません。

私には2つのストリームがあります:

  • 入ってくるオブジェクトを持つもの
    • --- a ---- b ---- c ---- d ----->
  • リストから選択したオブジェクトを持つもの
    • ------------------- c ---->

着信オブジェクトストリームから、オブジェクトのリストのストリームを作成します(スキャン演算子を使用)

  incoming: ----a--------b-------c----------d----------------\>
  list:  -------[a]----[a,b]----[a,b,c]----[a,b,c,d]---------\>

リストオブジェクトが選択されたら(n)、新しいストリームを開始します

  • 新しいストリームの最初の値は、スライスされたリストの最後の値です(list.slice(n))
incoming: ----a--------b-------c----------d--------------------e-------->
list:  -------[a]----[a,b]----[a,b,c]----[a,b,c,d]--------->
selected object:  ---------------------------------c------->

new stream of list:                           ------[c,d]-----[c,d,e]--->

オブジェクトが選択されたときにリストストリームの最後の値を取得できません、、、理解を深めるために大理石の図を作成しました、大理石の図

selectedObject$ =  new BehaviorSubject(0);
incomingObjects$ = new Subject();

list$ = incomingObjects$.pipe(
          scan((acc, val) => {
            acc.push(val);
            return acc;
          }, [])
        )
newList$ = selectedObject$.pipe(
            withLastFrom(list$),
          switchMap(([index,list])=> incomingObjects$.pipe(
             scan((acc, val) => {
              acc.push(val);
              return acc;
             }, list.slice(index))
          ))
        )
ダニエル・ヒメネス

スキャン演算子と一緒に使用する一般的なパターンは、現在の値を更新操作で使用できるように、スキャンする値の代わりにレデューサー関数を渡すことです。この場合、2つのオブザーバブルをマージ演算子でリンクし、それらの値を適切な関数にマップできます。リストに追加するか、選択後にリストをスライスします。

// these are just timers for demonstration, any observable should be fine.
const incoming$ = timer(1000, 1000).pipe(map(x => String.fromCharCode(x + 65)), take(10));
const selected$ = timer(3000, 3000).pipe(map(x => String.fromCharCode(x * 2 + 66)), take(2));

merge(
  incoming$.pipe(map(x => (s) => [...s, x])), // append to list
  selected$.pipe(map(x => (s) => { // slice list starting from selection
    const index = s.indexOf(x);
    return (index !== -1) ? s.slice(index) : s;
  }))
).pipe(
  scan((list, reducer) => reducer(list), []) // run reducer
).subscribe(x => console.log(x)); // display list state as demonstration.

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

アラームシステムのpytzタイミングを使用してトリガーするifステートメントを取得できません

ストリームを使用して配列内のアイテムのインスタンス変数からリストを作成します

ListFragmentのアイテムは、カスタム配列アダプターを使用してリストビューに表示されませんでした

複数の選択されたアイテムのリストを取得し、Javascriptを使用してそれらの値を配列として出力する方法

Xamarinフォーム-リストビューで選択されたアイテムの位置を取得します

ストリームのコンテンツを使用して、ソースのマテリアライズされた値を変更します

データのストリームにステップインし、フィルタリングされたデータの配列を出力するRxjs

ストリームを使用して文字列のリストからアイテムを分割できますか?

アイテムのエントリがグループリストビューでフォーカスされているときに、リストビューアイテムのコンテキストを取得します

sitecoreは保護されたアイテムのリストを取得します

Kotlin:クリックされたアイテムリストビューの値を取得します(フラグメント+アダプター)

Jinja2ソートされたリストの最初のアイテムを取得します

Pythonを使用して、リスト内のアイテムをランダムにペアリングします

SharePointリスト(オンプレミス)のリストアイテムを取得したいのですが、C#のプロパティを使用してリストアイテムを取得するためのコードを共有してください

Xamarin Switch Toggledイベント:リストのバインドされたアイテムを取得します

データテーブルで選択したアイテムを配列として使用する方法は、laravelを使用して行ごとにリストされているすべてのデータをデータベースに保存します

linqを使用して、複数のネストされたリストからアイテムを削除します

正規表現を使用してリストアイテムを検索し、そのアイテムをifステートメントで使用します

正規表現を使用してリストアイテムを検索し、そのアイテムをifステートメントで使用します

ネストされた配列アイテムを取得して、HTMLテーブルの新しい列に追加します

2つのテーブルを使用してアイテムの降順リストを取得します

タイマー メンバーを使用してクラス アイテムのリスト内のアイテムのインデックスを取得する

ストリーミングAPIを使用してリアルタイムのTwitter検索結果を取得する

Mongodbアグリゲーション-最初にアイテムリストを作成し、評価の詳細を含むアイテムの交差を取得します

インデックスの配列を指定して、ネストされた配列から適切なアイテムを取得します

特定のアイテムを無視してスコープ配列をフィルタリングします

Azure CloudBlockBlob Java クライアントを使用してリースされた BLOB アイテムを削除する

Autofacを使用して、指定されたキー付き/名前付きアイテムのリストをコンポーネントに挿入します

タップされたリストアイテムのコンテキストを取得して、Nativescriptの別のページに詳細を表示する方法

TOP 一覧

  1. 1

    Python / SciPyのピーク検出アルゴリズム

  2. 2

    セレンのモデルダイアログからテキストを抽出するにはどうすればよいですか?

  3. 3

    tkinterウィンドウを閉じてもPythonプログラムが終了しない

  4. 4

    androidsoongビルドシステムによるネイティブコードカバレッジ

  5. 5

    ZScalerと証明書の問題により、Dockerを使用できません

  6. 6

    Reactでclsxを使用する方法

  7. 7

    VisualStudioコードの特異点/ドッカー画像でPythonインタープリターを使用するにはどうすればよいですか?

  8. 8

    二次導関数を数値計算するときの大きな誤差

  9. 9

    Ansibleで複数行のシェルスクリプトを実行する方法

  10. 10

    STSでループプロセス「クラスパス通知の送信」のループを停止する方法

  11. 11

    ビュー用にサイズ変更した後の画像の高さと幅を取得する方法

  12. 12

    Three.js indexed BufferGeometry vs. InstancedBufferGeometry

  13. 13

    __init__。pyファイルの整理中に循環インポートエラーが発生しました

  14. 14

    三項演算子良い練習の代わりとしてOptional.ofNullableを使用していますか?

  15. 15

    エンティティIDを含む@RequestBody属性をSpringの対応するエンティティに変換します

  16. 16

    Spring Boot Filter is not getting invoked if remove @component in fitler class

  17. 17

    値間の一致を見つける最も簡単な方法は何ですか

  18. 18

    reCAPTCHA-エラーコード:ユーザーの応答を検証するときの「missing-input-response」、「missing-input-secret」(POSTの詳細がない)

  19. 19

    Rパッケージ「AppliedPredictiveModeling」のインストール中にエラーが発生しました

  20. 20

    画像変更コードを実行してもボタンの画像が変更されない

  21. 21

    好き/愛の関係のためのデータベース設計

ホットタグ

アーカイブ