在本主题中: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
答案 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)
}