web-dev-qa-db-fra.com

Est-il possible de "filtrer" une carte par valeur dans Typescript?

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.

5
Andrew Hill

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);
6
estus

Utiliser lodash :

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