Spread operator and iterators in JavaScript

The spread operator expands any object that has an iterator. This will take the default iterator. Let's look at an example. Let we have the following Map collection:

let map = new Map(); map.set('a', 1); map.set('b', 2); map.set('c', 3);

By default, when decomposed, a two-dimensional array will be obtained:

let arr = [...map]; console.log(arr); // [['a', 1], ['b', 2], ['c', 3]]

To obtain an array of keys, we decompose the corresponding iterator:

let arr = [...map.keys()]; console.log(arr); // ['a', 'b', 'c']

Let's do the same to get an array of values:

let arr = [...map.values()]; console.log(arr); // [1, 2, 3]

Expand the next object with spread operator:

let obj = { a: 1, b: 2, c: 3, [Symbol.iterator]: function *(){ for (let key in this){ yield this[key]; } } };