web-dev-qa-db-ja.com

Typescriptの値でマップを「フィルタリング」することは可能ですか?

キーではなく値でマップをフィルターする方法を探しています。 Angularアプリケーションで次のようにモデル化されたデータセットがあります。

_{
  "85d55e6b-f4bf-47bb-a988-78fdb9650ef0": {
    is_deleted: false,
    public_email: "[email protected]",
    id: "85d55e6b-f4bf-47bb-a988-78fdb9650ef0",
    modified_at: "2017-09-26T15:35:06.853492Z",
    social_url: "https://facebook.com/jamesbond007",
    event_id: "213b01de-da9e-4d19-8e9c-c0dae63e019c",
    visitor_id: "c3c232ff-1381-4776-a7f2-46c177ecde1c",
  },
}
_

これらのエントリのキーは、エントリ値のidフィールドと同じです。

これらのエントリのいくつかを前提として、特定の_event_id_を持つエントリのみを含むnew Map()をフィルタリングして返します。これが配列だったら、次のようにします。

_function example(eventId: string): Event[] {
  return array.filter((item: Event) => item.event_id === eventId);
}
_

基本的に、私はArray.prototype.map()の機能を複製しようとしています-配列ではなくマップ上にだけです。

私のプロジェクトで既に利用可能になっているので、より簡潔な方法でこれを達成するのに役立つ場合は、Lodashを使用したいと思っています。

7
Andrew Hill

です

Array.from(map.values()).filter((item: Event) => item.event_id === eventId);

またはTypeScript downlevelIteration オプションの場合、

[...map.values()].filter((item: Event) => item.event_id === eventId);
16
Estus Flask

lodash の使用:

_.pickBy(thing, function(value, key) {
  return value.event_id == eventId;
});
0
Rafal