我需要获得两个流的重复项。我想我几乎设法做到了,但只有当那些与第二个流重复的项目按顺序排列时。例如:
这有效:
nth1/3
但这并不是:
first = Observable.of(1, 2, 3)
second = Observable.of(2, 3, 1)
当我的循环到达4时,它会中断:
EmptyError {name:" EmptyError",stack:" EmptyError:no elements in 序列↵在新的Emp ... e (http://localhost:4200/vendor.bundle.js:161:22)",消息:"没有 序列中的元素"}
我的整个代码都在一个函数中,您可以复制/粘贴并测试它:
first = Observable.of(1, 4, 3)
second = Observable.of(1, 2, 3)
感谢您的帮助。
答案 0 :(得分:3)
如果您不关心哪一个流发出一组重复项的第一个值,您可以将它们合并并视为在单个流上查找重复值:
first.merge(second)
.scan(([ dupes, uniques ], next) =>
[ uniques.has(next) ? dupes.add(next) : dupes, uniques.add(next) ],
[ new Set(), new Set() ]
)
.map(([ dupes ]) => dupes)
注意:上面的集合是不可变的,以避免scan
中的未定义行为。
答案 1 :(得分:0)
我会在可观察序列上检查Observable.combineLatest
和scan
方法。
以下是我的想法,使用combineLatest
合并两个observable并在其上应用scan
运算符。您甚至可以使用Set
来确保唯一性,甚至是map
和filter
。