2017-10-06 2 views
0

Je cherche un moyen de filtrer une carte par valeur plutôt que par clé. J'ai un ensemble de données qui est modélisé comme suit dans mon application angulaire:Est-il possible de "filtrer" une carte par valeur dans Typescript?

{ 
    "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 touches de ces entrées sont les mêmes que le champ id sur les valeurs entrées.

Étant donné plusieurs de ces entrées, je voudrais filtrer et retourner un new Map() qui contient seulement les entrées avec event_id donné. Si cela était un tableau, je voudrais juste faire ce qui suit:

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

Essentiellement, je tente 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 peut aider à atteindre cet objectif d'une manière plus succincte car il est déjà disponible dans mon projet.

+2

Où est la 'Map' vous êtes filtrent? Je vois un 'Object'. [Ce n'est pas la même chose] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map#Objects_and_maps_compared). – jcalz

Répondre

0

En utilisant lodash:

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

Il est

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

Ou pour l'option tapuscrit downlevelIteration,

[...map.values()].filter((item: Event) => item.event_id === eventId); 
-1

Vous devez d'abord aplatir la carte, extraire ensuite le contenu à un Events objet

let dataSet = { 
 
    "entry1" : { id: "85d55e6b-f4bf-47b0" }, 
 
    "entry2" : { visitor_id: "6665b-7555bf-978b0" } 
 
} 
 

 
let flattenedMap = {}; 
 
    Object.entries(dataSet).forEach(
 
      ([key,value]) => Object.assign(flattenedMap, value) 
 
    ); 
 
    
 

 
console.log("The flattened Map") 
 
console.log(flattenedMap) 
 

 
let events = []; 
 
Object.entries(flattenedMap).forEach(
 
    ([key, value]) => events.push({"event_id" : value}) 
 
); 
 

 
console.log("The events"); 
 
console.log(events);