如何将Set转换为数组?

Set 似乎是创建具有保证唯一元素的 Array 的好方法,但它没有公开任何获取属性的好方法,除了生成器 [Set].values,它以一种尴尬的方式调用 。mySet.values.next()

这本来是可以的,如果你能在集合上调用类似的函数。但你也不能这样做。map

我试过,但似乎只将类似数组(NodeList和TypedArrays?)的对象转换为数组。另一个尝试:不适用于Sets,Set.prototype没有类似的静态方法。Array.fromObject.keys

那么,问题来了:有没有方便的内置方法来创建一个具有给定集合值的数组?(元素的顺序并不重要)。

如果不存在这样的选择,那么也许有一个很好的惯用语单行线可以做到这一点?喜欢,使用,或类似?for...of


答案 1

如果不存在这样的选择,那么也许有一个很好的惯用语单行线可以做到这一点?喜欢,使用,或类似?for...of

实际上,有几种方法可以将 Set 转换为数组

注意:对于 TypeScript 来说更安全。

const array = Array.from(mySet);
  • 只需将 Set 展开到数组中:

注意:使用 TypeScript 编译时,传播集时会遇到问题(请参阅问题 #8856)。使用上面更安全。Array.from

const array = [...mySet];
  • 老式的方式,迭代并推送到一个新的数组(集合确实有 forEach):
const array = [];
mySet.forEach(v => array.push(v));
  • 以前,使用非标准的,现在已弃用的数组理解语法:
const array = [v for (v of mySet)];

答案 2

通过格斯·克罗尔的 https://speakerdeck.com/anguscroll/es6-uncensored

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

var myArr = [...mySet];

或者,使用 Array.from

var myArr = Array.from(mySet);