将Set数组合并为单个Set

时间:2018-02-07 06:35:44

标签: javascript

如果我有一个集合数组,那么将这些集合组合成一个集合的最佳方法是什么?

说我是否有这个数组:

showBusinessGoals: (e) -> e.preventDefault() $(@el).find('.goal-business-type-selection').empty() @renderBusinesses() $(@el).find('.goal-business-type-selection').toggle()

如何操作此数组以生成具有相同输出的单个Set:

const array = [new Set([1, 2, 3]), new Set([4, 5, 6]), new Set([7, 8, 9])]

此数组具有任意数量的任意大小的数组。

3 个答案:

答案 0 :(得分:3)

最简单的是最好的:

let result = new Set;
for (const set of array)
    for (const element of set)
        result.add(element);

或者,如果你想使用构造函数,我会去一个立即调用的生成器函数来创建一个迭代器:

const result = new Set(function* () {
    for (const set of array)
        yield* set;
}());

当然,您也可以为此声明reusable functional-minded generator function

function* flatten(iterable) {
    for (const inner of iterable)
        for (const element of inner)
            yield element;
}
const result = new Set(flatten(array));

答案 1 :(得分:2)

您也可以使用reduce

new Set( array.reduce( ( a, c ) => a.concat( [...c] ), [] ) )

<强>演示

&#13;
&#13;
var array = [new Set([1, 2, 3]), new Set([4, 5, 6]), new Set([7, 8, 9])];
var output = new Set( array.reduce( ( a, c ) => a.concat( [...c] ), [] ) );
console.log( [...output] );
&#13;
&#13;
&#13;

答案 2 :(得分:0)

这是我能想到的最简单的方法。

int newSet[20];
int i=0;

for(int x:array)
{
newSet[i]=x;
i++;
}