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

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

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

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

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


当前回答

函数countUniqueValues(arr) { 返回Array.from(new Set(arr)).length } console.log(countUniqueValues([1,2,3,4,4,4,7,7,12,12,13]))

其他回答

使用扩散运算符来得到你想要的结果

var arrayFromSet = [...set];

对我来说,解决方案是:

var testSet = new Set();
var testArray = [];

testSet.add("1");
testSet.add("2");
testSet.add("2"); // duplicate item
testSet.add("3");

var someFunction = function (value1, value2, setItself) {
    testArray.push(value1);
};

testSet.forEach(someFunction);

console.log("testArray: " + testArray);

value1 = value2 =>集合中当前位置所包含的值。为两个参数传递相同的值

在IE11下工作。

假设你只是临时使用Set在数组中获取唯一值,然后转换回数组,尝试使用这个:

_.uniq([])

这依赖于使用下划线或低破折号。

简单的回答

将集合展开到[]

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

结果:[1,5]

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

我们可以用展开运算符

var myArr = [...mySet];

或者,使用Array.from:

var myArr = Array.from(mySet);