Man*_*han 4 json object rxjs rxjs5 angular
我有一个可观察对象,它向我传递一个 json 对象,我在该对象上使用了不同的运算符。如果整个对象与以前相同,我不想有重复项。我不能只使用像 id 这样的一个比较器,因为它的 id 可能相同,但内容不同。
所以我目前正在对对象进行字符串化,然后使用不同的,它工作得很好
有一个更好的方法吗?
someObservable
.startWith(cachedCopy)
.map(item => JSON.stringify(item))
.distinct()
.subscribe(item => {
//I do some stuff!
})
Run Code Online (Sandbox Code Playgroud)
实际上我认为使用JSON.stringify()比较两个对象是否包含相同的数据是最简单的方法。如果您知道对象标识必须不同,您可以使用pairwise().filter(pair => pair[0] !== pair[1])(这些必须是两个不同的对象实例),但这实际上取决于您的用例,并且您是否可以保证这样的条件(通常不是我个人的经验,并且比较 JSON 是“好的”)足够的”)。
请注意,distinct()自创建链以来,仅传递真正不同的项目,但在您的描述中,您说“如果整个对象与以前相同,则重复”,这似乎您应该使用distinctUntilChanged。
该distinctUntilChanged运算符将比较器函数作为可选参数,您可以使用它来检查两个对象是否相同:
.distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))
Run Code Online (Sandbox Code Playgroud)