Using map() on an iterator
dictionary, ecmascript-6, iterator, javascript, syntax
Solution
The simplest and least performant way to do this is:
Array.from(m).map(([key,value]) => /* whatever */)
Better yet
Array.from(m, ([key, value]) => /* whatever */))
`Array.from` takes any iterable or array-like thing and converts it into an array! As Daniel points out in the comments, we can add a mapping function to the conversion to remove an iteration and subsequently an intermediate array.
Using `Array.from` will move your performance from `O(1)` to `O(n)` as @hraban points out in the comments. Since `m` is a `Map`, and they can't be infinite, we don't have to worry about an infinite sequence. For most instances, this will suffice.
There are a couple of other ways to loop through a map.
Using `forEach`
m.forEach((value,key) => /* stuff */ )
Using `for..of`
var myMap = new Map();
myMap.set(0, 'zero');
myMap.set(1, 'one');
for (var [key, value] of myMap) {
console.log(key + ' = ' + value);
}
// 0 = zero
// 1 = one
Problem
Say we have a Map: `let m = new Map();`, using `m.values()` returns a map iterator. But I can't use `forEach()` or `map()` on that iterator and implementing a while loop on that iterator seems like an anti-pattern since ES6 offer functions like `map()`. So is there a way to use `map()` on an iterator?