web-dev-qa-db-ja.com

クエリにRxJSとfilter(Boolean)を使用していますか?

私はスニペットでいくつかのコードを読んでいます:

_search(query: string) {
  of(query).
  pipe(
    filter(Boolean), 
    debounceTime(300), 
_

filter(Boolean)は基本的にfilter(v=>!!v)と同じですか?

10
Ole

はい、同じです。

   console.log(typeof Boolean); // prints function
   console.log(Boolean.prototype.constructor("truthy")); // prints true
   console.log(Boolean === Boolean.prototype.constructor); // prints true

Booleanグローバル参照は、最初の引数からブール値を返すコンストラクター関数を指します。

コンストラクターを使用してbooleanラッパーオブジェクトを作成できますが、プリミティブtrue値。

    console.log(new Boolean("truthy")); // prints an object.
    console.log(new Boolean("truthy").valueOf() === true); // prints true
    console.log((new Boolean("truthy")) === true); // prints false
    console.log(Boolean("truthy") === true); // prints true

リファレンス: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean

6
Reactgular

サブスクリプションで未定義の値を取得しないという点で、同じ結果が得られます。

違いは、filter(Boolean)を使用すると型推論が失われることです。

const query = 'the query';

of(query).
  pipe(
     filter(Boolean)
  ).subscribe(val); // val here is of type 'Any'

of(query).
  pipe(
     filter(Boolean)
  ).subscribe((val: String)); // we can infer it back to String later

of(query).
   pipe(
      filter(v=> v!== undefined)
   ).subscribe(val); // val here is of type 'String' 
4
Corey Downie