如何将设置转换为数组?

设置似乎是一个很好的方式来创build具有保证独特元素的数组,但它并没有公开任何好的方法来获取属性,除了generator [Set] .values,这是以一种尴尬的方式调用mySet.values.next()

如果你可以在集合上调用map和类似的函数,这将是可以的。 但是你也做不到。

我已经尝试了Array.from ,但似乎只将数组(像NodeList和TypedArrays?)对象转换为数组。 另一个尝试: Object.keys不能用于集合,并且Set.prototype没有类似的静态方法。

所以,问题: 是否有任何方便的内置方法创build一个给定的值的数组? (元素的顺序并不重要)。

如果没有这样的select,那么也许有一个很好的惯用的单线程来做到这一点? 喜欢, for...of或类似的?

如果没有这样的select,那么也许有一个很好的惯用的单线程来做到这一点? 喜欢,用于……或类似的?

事实上,有几种方法可以将Set转换为Array :

使用Array.from

 let array = Array.from(mySet); 

只需spreading数组放在数组中

 let array = [...mySet]; 

旧式的方式,迭代并推送到一个新的数组(套件有forEach

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

使用一个fancier for...of循环(这似乎不再在Chrome中工作了)

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

通过Angus Croll的https://speakerdeck.com/anguscroll/es6-uncensored

事实certificate,我们可以使用spread运算符:

 var myArr = [...mySet]; 

或者,也可以使用Array.from

 var myArr = Array.from(mySet); 

假设您只是暂时使用Set来获取数组中的唯一值,然后转换回数组,请尝试使用以下命令:

 _.uniq([]) 

这依赖于使用下划线或下划线 。

使用传播运算符来获得您想要的结果

 var arrayFromSet = [...set]; 

也许迟到了,但你可以做以下的事情:

 let set = new Set(); let arrayLike = set.entries(); // for an array of [[key, value]] pairs // let arrayLike = set.values(); // for an array of [value] let array = Array.from(arrayLike); 

这应该在支持ES6的浏览器中没有任何问题,或者如果你有一个正确的shims上述function的垫片。