javascript js数组 - 如何将设置转换为数组?





js数组转字符串 js数字转数组 (5)


假设您只是暂时使用Set来获取数组中的唯一值,然后再转换回数组,请尝试使用以下命令:

_.uniq([])

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

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

如果你可以在集合上调用map和类似的函数,这将是确定的。 但是你也做不到。

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

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

如果没有这样的选择,那么也许有一个很好的惯用的单线程来做到这一点? 喜欢, for...of ,还是类似的?




如果没有这样的选择,那么也许有一个很好的惯用的单线程来做到这一点? 喜欢,用于...的,还是类似的?

的确,有几种方法可以将Set转换为Array

使用Array.from

let array = Array.from(mySet);

简单地spreading Set放在一个数组中

let array = [...mySet];

旧式的方式,迭代并推送到一个新的数组(Sets有forEach

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

使用一个fancier for...of循环(这似乎不再适用于Chrome)

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



使用传播运算符来获得您想要的结果

var arrayFromSet = [...set];



也许对晚会来说,但你可以做到以下几点:

let set = new Set();
let arrayLike = set.entries(); // for an array of [[key, value]] pairs
// let arrayLike = set.values(); // for an array of [value]
let array = Array.from(arrayLike);

这应该可以在支持ES6的浏览器中正常工作,或者如果您有足够的垫片来正确地提供上述功能。




没有内置的能力可以突破forEach。要中断执行,请使用Array#some以下内容:

[1,2,3].some(function(number) {
    return number === 1;
});

这是有效的,因为some只要以数组顺序执行的任何回调返回true,就会返回true,从而使其余的执行短路。原来的答案见阵原型some





javascript arrays collections syntax ecmascript-harmony