如何将集合转换为数组?

新手上路,请多包涵

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

如果您可以在 Sets 上调用 map 和类似函数,那就没问题了。但你也不能那样做。

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

所以,问题是: 是否有任何方便的内置方法来创建具有给定 Set 值的 Array ? (元素的顺序并不重要)。

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

原文由 c69 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

如果不存在这样的选项,那么也许有一个很好的惯用语

单线这样做?喜欢,使用 for...of 还是类似的?

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

注意:TypeScript 更安全。

 const array = Array.from(mySet);

  • _简单地将 Set spreading 在一个数组中:_

注意:使用 TypeScript 编译时,传播 Set 会出现问题(请参阅 问题 #8856 )。改用上面的 Array.from 会更安全。

 const array = [...mySet];

  • 老式的方式,迭代并推送到一个新数组(集合确实有 forEach ):
 const array = [];
 mySet.forEach(v => array.push(v));

  • 以前,使用非标准的,现在已弃用的数组理解语法:
 const array = [v for (v of mySet)];

原文由 adeneo 发布,翻译遵循 CC BY-SA 4.0 许可协议

通过 https://speakerdeck.com/anguscroll/es6- 未经 Angus Croll 审查

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

 var myArr = [...mySet];

或者,也可以使用 Array.from

 var myArr = Array.from(mySet);

原文由 c69 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题