使用mergeSets Generator函数合并集合

问题描述 投票:0回答:1

在本主题中:Simplest way to merge ES6 Maps/Sets?

我发现了一种合并Set或Map的好方法

let set3 = new Set(function*() { yield* set1; yield* set2; }());

我想创建一个可以合并任意数量的集合的函数,如下所示:

function  mergeSets() { 
    return new Set(function*() {
        for (const set of arguments) {
            yield* set
        }
    }())
}

我有办法吗?当我测试这个时,我得到一个空的Set作为结果

javascript arrays set generator
1个回答
1
投票

你在内部arguments中使用你的function*,它立即被调用而没有参数,所以arguments是空的,所以迭代它会导致返回的集合为空。我会在外部函数中使用参数rest语法来将参数收集到一个正确的数组中,然后你可以迭代数组:

(打开浏览器控制台,而不是片段控制台,以查看生成的Set :)

const set1 = new Set(['1', '2', '3']);
const set2 = new Set(['4', '5', '6']);
const set3 = new Set(['7', '8', '9']);

const mergeSets = (...sets) => new Set(function* () {
  for (const set of sets) yield* set;
}());

console.log(
  mergeSets(set1, set2, set3)
);
© www.soinside.com 2019 - 2024. All rights reserved.