如何将设置转换为数组?
设置似乎是一个很好的方式来创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的垫片。