キーではなく値でマップをフィルターする方法を探しています。 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を使用したいと思っています。
です
Array.from(map.values()).filter((item: Event) => item.event_id === eventId);
またはTypeScript downlevelIteration
オプションの場合、
[...map.values()].filter((item: Event) => item.event_id === eventId);
lodash の使用:
_.pickBy(thing, function(value, key) {
return value.event_id == eventId;
});