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

这是可以的,如果你可以调用map和类似的函数集。但你不能这样做。

我已经尝试了Array.from,但似乎只转换类似数组(NodeList和TypedArrays ?)对象到数组。另一个尝试:Object。keys不适用于Set,而Set。原型没有类似的静态方法。

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

如果不存在这样的选项,那么也许有一个很好的惯用的一行程序可以做到这一点?比如,用来…属于,还是类似的?


当前回答

最简单的方法

 const array = [...new Set([1,1,2,3,3,4,5])]
    console.log(array)

其他回答

如果没有这样的选择,那么也许有一个很好的习语 只用一句话就能搞定?比如,用来…属于,还是类似的?

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

使用Array.from:

注意:对于TypeScript更安全。

const array = Array.from(mySet);

简单地在数组中展开Set:

注意:在使用TypeScript编译时,展开一个Set会有问题(参见问题#8856)。使用Array.from above会更安全。

const array = [...mySet];

老式的方法,迭代并推入一个新数组(set确实有forEach):

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

以前,使用非标准的,现在已弃用的数组理解语法:

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

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

我们可以用展开运算符

var myArr = [...mySet];

或者,使用Array.from:

var myArr = Array.from(mySet);

简单的回答

将集合展开到[]

let mySet = new Set()
mySet.add(1)
mySet.add(5)
mySet.add(5) 
let arr = [...mySet ]

结果:[1,5]

最简单的方法

 const array = [...new Set([1,1,2,3,3,4,5])]
    console.log(array)

我更喜欢先从数组中删除重复项,然后尝试排序。 返回新数组的第一个元素。

    function processData(myArray) {
        var s = new Set(myArray);
        var arr = [...s];
        return arr.sort((a,b) => b-a)[1];
    }
    
    console.log(processData([2,3,6,6,5]);