DDan
DDan

Reputation: 8276

Select one property from Map.values()

I would like to have something like this:

let myMap = new Map<string, any>();

myMap.set("aaa", {a: 1, b: 2, c:3});
myMap.set("bbb", {a: 1, b: 2, c:6});
myMap.set("ccc", {a: 1, b: 2, c:9});

let cs = myMap.values().map(x => x.c);

Selecting the c property from all entries from the map. This is failing with:

Property 'map' does not exist on type 'IterableIterator<any>'.

Any elegant solution for this?

Upvotes: 1

Views: 1151

Answers (1)

Shilly
Shilly

Reputation: 8589

You can use Array.from() to turn any iterable into an array:

let myMap = new Map();

myMap.set("aaa", {a: 1, b: 2, c:3});
myMap.set("bbb", {a: 1, b: 2, c:6});
myMap.set("ccc", {a: 1, b: 2, c:9});

// Basic example
let cs = Array.from( myMap.values() ).map(x => x.c);

console.log( cs );

// Array.from also takes a mapping function as the second parameter, so even shorter:

let cs_alt = Array.from( myMap.values(), x => x.c );

console.log( cs_alt );

Upvotes: 6

Related Questions