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

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

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

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

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


当前回答

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

    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]);

其他回答

对我来说,解决方案是:

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下工作。

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

    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]);

也许参加派对太晚了,但你可以做以下事情:

const set = new Set(['a', 'b']);
const values = set.values();
const array = Array.from(values);

这在支持ES6的浏览器中应该没有问题,或者如果你有一个正确地填充上述功能的垫片。

编辑:今天你可以使用@c69的建议:

const set = new Set(['a', 'b']);
const array = [...set]; // or Array.from(set)

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

_.uniq([])

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

这里有一个简单的方法,从数组中获得唯一的原始值。如果您将数组转换为Set,在此之后,将从Set转换为数组。此转换仅适用于原始值,对于数组中的对象无效。自己试试吧。

    let myObj1 = {
        name: "Dany",
        age: 35,
        address: "str. My street N5"
    }

    let myObj2 = {
        name: "Dany",
        age: 35,
        address: "str. My street N5"
    }

    var myArray = [55, 44, 65, myObj1, 44, myObj2, 15, 25, 65, 30];
    console.log(myArray);

    var mySet = new Set(myArray);
    console.log(mySet);

    console.log(mySet.size === myArray.length);// !! The size differs because Set has only unique items

    let uniqueArray = [...mySet];
    console.log(uniqueArray); 
    // Here you will see your new array have only unique elements with raw 
    // values. The objects are not filtered as unique values by Set.
    // Try it by yourself.