Je cherche un moyen de filtrer une carte par valeur plutôt que par clé. J'ai un jeu de données modélisé comme suit dans mon application 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",
},
}
Les clés de ces entrées sont identiques au champ id
des valeurs des entrées.
Étant donné plusieurs de ces entrées, je voudrais filtrer et retourner une new Map()
qui ne contient que les entrées avec un event_id
donné. Si c'était un tableau, je ferais juste ce qui suit:
function example(eventId: string): Event[] {
return array.filter((item: Event) => item.event_id === eventId);
}
Essentiellement, j'essaie de reproduire la fonctionnalité de Array.prototype.map()
- juste sur une carte au lieu d'un tableau.
Je suis prêt à utiliser Lodash si cela aide à y parvenir de manière plus succincte, car il est déjà disponible dans mon projet.
Il est
Array.from(map.values()).filter((item: Event) => item.event_id === eventId);
Ou pour TypeScript downlevelIteration
option,
[...map.values()].filter((item: Event) => item.event_id === eventId);
Utiliser lodash :
_.pickBy(thing, function(value, key) {
return value.event_id == eventId;
});