json - 使用 Rxjs 不同运算符将整个对象与嵌套进行比较

标签 json angular object rxjs rxjs5

我有一个 observable,它向我传递一个 json 对象,我在该对象上使用了 distinct 运算符。
如果整个对象与以前相同,我不想有重复项。我不能只使用像 id 这样的单一比较器,因为它的 id 可能相同但它的内容不同。

所以我目前正在对对象进行字符串化,然后使用 distinct 并且它工作正常

有一个更好的方法吗?

someObservable
  .startWith(cachedCopy)
  .map(item => JSON.stringify(item))
  .distinct()
  .subscribe(item => {
      //I do some stuff!
     })

最佳答案

其实我想用 JSON.stringify()比较两个对象是否包含相同的数据是最简单的方法。如果您知道对象标识必须不同,您可以使用 pairwise().filter(pair => pair[0] !== pair[1]) (这些必须是两个不同的对象实例)但这实际上取决于您的用例以及您是否可以保证这样的条件(通常不是在我的个人经验中并且比较 JSON 是“足够好”)。

请注意 distinct()自从创建链以来,只传递真正不同的项目,但在您的描述中,您说“如果整个对象与以前相同,则重复”,这似乎您应该使用 distinctUntilChanged反而。
distinctUntilChanged运算符将一个比较器函数作为可选参数,您可以使用它来检查两个对象是否相同:

.distinctUntilChanged((prev, curr) => JSON.stringify(prev) === JSON.stringify(curr))

关于json - 使用 Rxjs 不同运算符将整个对象与嵌套进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48596405/

相关文章:

javascript - 在 node.js 中调用一个函数

javascript - 未捕获( promise )SyntaxError : Unexpected end of JSON input

javascript - 使用 Javascript 模拟 API 调用

Angular2 回调与 Promise/Observable

Javascript 原型(prototype)继承不起作用

java - 搜索对象数组和索引位置

json - 什么是 "representation"、 "state"和 "transfer"在具象状态传输 (REST) 中?

angular - 如何将我的路线绑定(bind)到 angular-material2 中的步进器?

angular - Ngx 无限滚动 - 模板解析错误 : Can't bind to 'infiniteScrollDistance' since it isn't a known property

javascript - 当找到两个对象时,forEach 内部的过滤器无法正常工作