このforループを削除して、代わりにarray.some関数を使用するにはどうすればよいですか?

ボブ

私は次のクラスを持っています。filterOutEmails関数をarray.some、現在のコードの代わりに使用するように変換したいと思います。

export class UsertableComponent {
  dataSource: MatTableDataSource<TrialUser>;


  createTableFromServer = (data: TrialUsers[], emailDomains:string) => {
    this.dataSource = new MatTableDataSource(data);
    this.dataSource.filterPredicate = this.filterOutEmails
  } 

  filterOutEmails = (row: TrialUser, emailDomains: string): boolean => {
    const listofFilters = emailDomains.split(',');
    for (let i = 0; i < listofFilters.length; i++){
      if (row.email.toLowerCase().includes(listofFilters[i].trim())){
        return true;
      };
    }
    return false;
  }
}

次のことを試してみましたthisが、nullでした。矢印関数を使おうとすると、行を渡すことができませんでした。(私は設定しない場合this: TrialUserは、パラメータとしてタイプUsertableComponentに「これ」に対応し、クラスの機能は、私が渡しているにもかかわらず、であるrowsomeでthisObjectなど)

private determineIfRowShouldBeShown(this: TrialUser, domain: string): boolean {
  const row: TrialUser = this;
  return !row.email.toLowerCase().includes(domain.trim());
}

private filterOutEmails= (row: TrialUser, emailDomains: string): boolean {
  const listofFilters = emailDomains.split(',');
    return listofFilters.some(this.determineIfRowShouldBeShown, row) ;
  }
}

'determineIfRowSHouldBeShown'をインラインファットアロー関数として配置することは機能しますが、関数定義を分離したままにしておきたいと思います。

ジェスロ・ラーソン

矢印関数を使用するthisと、引数として渡された場合でも字句的にバインドされます。

// If you're gonna abuse `this` I wouldn't put the function in a class as it's really confusing for `this` to not be the instance. You also can't use arrow functions in this case as they prevent rebinding the context.
function determineIfRowShouldBeShown(domain: string): boolean {
    return !this.email.toLowerCase().includes(domain.trim());
}

export class UsertableComponent {
  dataSource: MatTableDataSource<TrialUser>;

  createTableFromServer = (data: TrialUsers[], emailDomains:string) => {
      this.dataSource =  new MatTableDataSource(data);
      this.dataSource.filterPredicate = this.filterOutEmails
  }
  // I don't think this is a good name since it doesn't actually filter anything.
  filterOutEmails(row: TrialUser, emailDomains: string): boolean{
    return emailDomains.split(',').some(determineIfRowShouldBeShown, row);
  }
}

これは、他のいくつかの方法でも実行できます。

関数の手動バインディングの使用:

...
filterOutEmails(row: TrialUser, emailDomains: string){
  emailDomains.split(',').some(determineIfRowShouldBeShown.bind(row));
}

カリー化/部分適用の使用(私の好み)

const determineIfRowShouldBeShown = (row: TrialUser) => (domain: string): boolean => !row.email.toLowerCase().includes(domain.trim());
...
filterOutEmails(row: TrialUser, emailDomains: string){
  emailDomains.split(',').some(determineIfRowShouldBeShown(row));
}

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

getHoursの代わりにこの関数でgetMinutesを使用するにはどうすればよいですか?

分類Dev

LESS関数の代わりにCSS関数を使用するにはどうすればよいですか?

分類Dev

ループを使用してこのRuby関数を作成するにはどうすればよいですか?

分類Dev

ラムダの代わりに関数を使用するようにこのコードを変更するにはどうすればよいですか?

分類Dev

onChangeの代わりにonClickで関数を使用するにはどうすればよいですか?

分類Dev

open関数でshの代わりにbashを使用するにはどうすればよいですか?

分類Dev

このループ関数でURLをコピーして貼り付ける代わりに、データフレーム列を使用するにはどうすればよいですか?

分類Dev

Array.prototype.some()を非同期関数で使用するにはどうすればよいですか?

分類Dev

結合関数の代わりにforeachを使用するにはどうすればよいですか?

分類Dev

Rのforループの代わりに、配列と行列に適用ファミリ関数を使用するにはどうすればよいですか?

分類Dev

JSON.swiftの代わりにSwiftyJSONを使用するようにこの関数を書き直すにはどうすればよいですか?

分類Dev

シェルの関数を使用してこれを作成するにはどうすればよいですか

分類Dev

javascriptでforループの代わりにmapを使用するにはどうすればよいですか?

分類Dev

このbash関数で「for」ループの使用を回避するにはどうすればよいですか?

分類Dev

foreachループの代わりにLINQを使用するにはどうすればよいですか?

分類Dev

再帰の代わりにforループを使用するにはどうすればよいですか?

分類Dev

関数でgetStdGenを使用するにはどうすればよいですか

分類Dev

Squirrelで関数を使用するにはどうすればよいですか?

分類Dev

Ord :: max関数を使用するにはどうすればよいですか?

分類Dev

関数型を使用するにはどうすればよいですか?

分類Dev

mod関数を使用するにはどうすればよいですか?

分類Dev

prepend()関数を使用するにはどうすればよいですか?

分類Dev

glm()関数を使用するにはどうすればよいですか?

分類Dev

SQLite SUM()関数を使用するにはどうすればよいですか?

分類Dev

forループを使用して関数を反復処理するにはどうすればよいですか?

分類Dev

フォームの代わりに `curl`を使用してファイルをアップロードするにはどうすればよいですか?

分類Dev

これの代わりに現在のノードを使用するにはどうすればよいですか?

分類Dev

javasciptを使用して関数内で関数を使用するにはどうすればよいですか?

分類Dev

関数の引数として関数を使用するにはどうすればよいですか?

Related 関連記事

  1. 1

    getHoursの代わりにこの関数でgetMinutesを使用するにはどうすればよいですか?

  2. 2

    LESS関数の代わりにCSS関数を使用するにはどうすればよいですか?

  3. 3

    ループを使用してこのRuby関数を作成するにはどうすればよいですか?

  4. 4

    ラムダの代わりに関数を使用するようにこのコードを変更するにはどうすればよいですか?

  5. 5

    onChangeの代わりにonClickで関数を使用するにはどうすればよいですか?

  6. 6

    open関数でshの代わりにbashを使用するにはどうすればよいですか?

  7. 7

    このループ関数でURLをコピーして貼り付ける代わりに、データフレーム列を使用するにはどうすればよいですか?

  8. 8

    Array.prototype.some()を非同期関数で使用するにはどうすればよいですか?

  9. 9

    結合関数の代わりにforeachを使用するにはどうすればよいですか?

  10. 10

    Rのforループの代わりに、配列と行列に適用ファミリ関数を使用するにはどうすればよいですか?

  11. 11

    JSON.swiftの代わりにSwiftyJSONを使用するようにこの関数を書き直すにはどうすればよいですか?

  12. 12

    シェルの関数を使用してこれを作成するにはどうすればよいですか

  13. 13

    javascriptでforループの代わりにmapを使用するにはどうすればよいですか?

  14. 14

    このbash関数で「for」ループの使用を回避するにはどうすればよいですか?

  15. 15

    foreachループの代わりにLINQを使用するにはどうすればよいですか?

  16. 16

    再帰の代わりにforループを使用するにはどうすればよいですか?

  17. 17

    関数でgetStdGenを使用するにはどうすればよいですか

  18. 18

    Squirrelで関数を使用するにはどうすればよいですか?

  19. 19

    Ord :: max関数を使用するにはどうすればよいですか?

  20. 20

    関数型を使用するにはどうすればよいですか?

  21. 21

    mod関数を使用するにはどうすればよいですか?

  22. 22

    prepend()関数を使用するにはどうすればよいですか?

  23. 23

    glm()関数を使用するにはどうすればよいですか?

  24. 24

    SQLite SUM()関数を使用するにはどうすればよいですか?

  25. 25

    forループを使用して関数を反復処理するにはどうすればよいですか?

  26. 26

    フォームの代わりに `curl`を使用してファイルをアップロードするにはどうすればよいですか?

  27. 27

    これの代わりに現在のノードを使用するにはどうすればよいですか?

  28. 28

    javasciptを使用して関数内で関数を使用するにはどうすればよいですか?

  29. 29

    関数の引数として関数を使用するにはどうすればよいですか?

ホットタグ

アーカイブ