c69 c69 - 4 months ago 72
Javascript Question

How to convert Set to Array?

Set seems like a nice way to create Arrays with guaranteed unique elements, but it does not expose any good way to get properties, except for generator [Set].values, which is called in an awkward way of

mySet.values.next()
.

This would have been ok, if you could call
map
and similar functions on Sets. But you cannot do that, as well.

I've tried
Array.from
, but seems to be converting only array-like (NodeList and TypedArrays ?) objects to Array. Another try:
Object.keys
does not work for Sets, and Set.prototype does not have similar static method.

So, the question: Is there any convenient inbuilt method for creating an Array with values of a given Set ? (Order of element does not really matter).

if no such option exists, then maybe there is a nice idiomatic one-liner for doing that ? like, using
for...of
, or similar ?

Answer

if no such option exists, then maybe there is a nice idiomatic one-liner for doing that ? like, using for...of, or similar ?

Indeed, there are several ways to convert a Set to an Array:

using Array.from

let array = Array.from(mySet);

Simply spreading the Set out in an array

let array = [...mySet];

The old fashion way, iterating and pushing to a new array (Sets do have forEach)

let array = [];
mySet.forEach(v => array.push(v));

Using a fancier for...of loop (this doesn't seem to work in Chrome anymore)

let array = [v for (v of mySet)];