How to convert Set to Array?

前端 未结 10 1036
余生分开走
余生分开走 2020-11-28 01:04

Set seems like a nice way to create Arrays with guaranteed unique elements, but it does not expose any good way to get properties, except for generator [Set

相关标签:
10条回答
  • 2020-11-28 01:18

    Use spread Operator to get your desired result

    var arrayFromSet = [...set];
    
    0 讨论(0)
  • 2020-11-28 01:20

    In my case the solution was:

    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 equals value2 => The value contained in the the current position in the Set. The same value is passed for both arguments

    Worked under IE11.

    0 讨论(0)
  • 2020-11-28 01:23

    Here is an easy way to get only unique raw values from array. If you convert the array to Set and after this, do the conversion from Set to array. This conversion works only for raw values, for objects in the array it is not valid. Try it by yourself.

        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.
    
    0 讨论(0)
  • 2020-11-28 01:26

    SIMPLEST ANSWER

    just spread the set inside []

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

    Result: [1,5]

    0 讨论(0)
  • 2020-11-28 01:27

    via https://speakerdeck.com/anguscroll/es6-uncensored by Angus Croll

    It turns out, we can use spread operator:

    var myArr = [...mySet];
    

    Or, alternatively, use Array.from:

    var myArr = Array.from(mySet);
    
    0 讨论(0)
  • 2020-11-28 01:29

    Perhaps to late to the party, but you could just do the following:

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

    This should work without problems in browsers that have support for ES6 or if you have a shim that correctly polyfills the above functionality.

    Edit: Today you can just use what @c69 suggests:

    const set = new Set(['a', 'b']);
    const array = [...set]; // or Array.from(set)
    
    0 讨论(0)
提交回复
热议问题