如何将Set转换为Array?

2020/09/25 14:41 · javascript ·  · 0评论

Set似乎是一种创建具有保证唯一元素的Array的好方法,但是它没有公开任何获取属性的好方法,除了Generator [Set] .values之外,后者以尴尬的方式调用mySet.values.next()

如果可以map在Sets上调用和类似的函数,那应该没问题。但是您也不能那样做。

我试过了Array.from,但似乎只是将类似数组的对象(NodeList和TypedArrays?)转换为Array。另一种尝试:Object.keys不适用于Set,并且Set.prototype没有类似的静态方法。

因此,问题是否存在任何方便的内置方法来创建具有给定Set值的Array?(元素的顺序并不重要)。

如果不存在这样的选择,那么也许有一个很好的惯用一线做这件事?喜欢,使用for...of还是类似?

如果不存在这样的选择,那么也许有一个很好的惯用一线做这件事?喜欢,用于...或类似的东西?

事实上,有几种方法的转换设置一个数组

使用 Array.from

let array = Array.from(mySet);

只需spreading将阵列中的列

let array = [...mySet];

以旧的方式迭代并推送到新数组(Set确实有forEach

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

以前,使用非标准且现在不推荐使用的数组理解语法:

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

通过https://speakerdeck.com/anguscroll/es6-未经Angus Croll审查

事实证明,我们可以使用spread运算符:

var myArr = [...mySet];

或者,使用Array.from

var myArr = Array.from(mySet);

假设您只是Set临时使用以获取数组中的唯一值,然后再转换回数组,请尝试使用此方法:

_.uniq([])

这依赖于使用下划线lo-dash

可能要晚一些,但是您可以执行以下操作:

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)

使用传播算子获得您想要的结果

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 => Set中当前位置中包含的值。两个参数传递相同的值

在IE11下工作。

使用Set并将其转换为数组非常类似于复制Array ...

因此,您可以使用相同的方法来复制数组,这在ES6中非常容易

例如,您可以使用 ...

想象一下,您在下面有这个套装:

const a = new Set(["Alireza", "Dezfoolian", "is", "a", "developer"]);

您可以使用以下命令简单地将其转换:

const b = [...a];

结果是:

["Alireza", "Dezfoolian", "is", "a", "developer"]

数组,现在您可以使用可用于数组的所有方法...

其他常用方法:

const b = Array.from(a);

或使用像这样的循环:

const b = [];
a.forEach(v => b.push(v));

下面的代码从一个数组创建一个集合,然后使用...运算符。

var arr=[1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7,8,9,];
var set=new Set(arr);
let setarr=[...set];
console.log(setarr);

最简单的答案

只是将集合传播到[]

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

结果:[1,5]

这是从数组仅获取唯一原始值的简单方法。如果将数组转换为Set,然后再执行从Set转换为array的转换。此转换仅适用于原始值,对于数组中的对象无效。自己尝试。

    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.
本文地址:http://javascript.askforanswer.com/ruhejiangsetzhuanhuanweiarray.html
文章标签: ,   ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!