使用mergeSets Generator函数合并集合

时间:2018-08-30 09:43:20

标签: javascript arrays set generator

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

我找到了一种合并Set或Map的好方法

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

我想制作一个可以像这样合并任意数量的Set的函数:

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

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

1 个答案:

答案 0 :(得分:1)

您使用的是arguments内部的{em> 内部function*,该内部arguments无需参数即可立即调用,因此Set为空,因此对其进行了迭代导致返回的集合为空。我将在外部函数中使用参数rest语法将参数收集到适当的数组中,然后可以遍历该数组:

(打开浏览器控制台,而不是代码段控制台,以查看生成的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) );:)

class MyDateFormatter : DateFormatter {

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

override init() {
    super.init()
}

override func date(from string: String) -> Date? {
    return super.date(from:string)?.addingTimeInterval(-8*60*60)
}