如何使用distinctUntilKeyChanged比较多个键?

cal*_*r47 5 javascript rxjs

我仍在学习 rxjs,并且我对如何为运算符 uniqueUntilChanged 编写自定义比较函数有点困惑。

我研究了使用distinctUntilKeyChanged,它对于单个键非常有用......但我有两个需要比较的键。

看来我可能需要合并扫描运算符来将发出的当前值与发出的最后一个值进行比较......?

好的,这是我的代码。我正在从谷歌地图流式传输地图中心更改。我不需要非常精确的地图中心地理位置,因此我对谷歌地图返回的大部分小数进行四舍五入。

searchStream$
  .map((value)=>{
  return {
    lat: round(value[1].lat, 1),
    lng: round(value[1].lng, 1)
  }
}).distinctUntilKeyChanged('lat')
  .do((position)=>{console.log(position)})
  .subscribe((position)=>{ this._store.dispatch(new QueryUpdateGeoPositionAPIAction({latitude: position.lat, longitude: position.lng})) });
Run Code Online (Sandbox Code Playgroud)

回到我的问题,如何比较两个属性(纬度和经度)以确保它仅在其中一个值发生变化时才发出值?

谢谢您的帮助!

Sco*_*yet 3

distinct来自文档的 RxJS 部分:

在 RxJS 中,distinct 运算符有两个可选参数:

  1. 一个函数,接受源 Observable 发出的项目并返回一个键,在比较两个项目的独特性时,将使用该键代替项目本身
  2. 一个函数,它接受两个项目(或两个键)并比较它们的不同性,false如果它们不同则返回(如果您在此处不提供自己的函数,则默认函数是相等函数)

所以在我看来(没有测试)你可以简单地通过类似的东西

(a, b) => a.lat === b.lat && a.lon === b.lon 
Run Code Online (Sandbox Code Playgroud)

我不确定 RxJS 约定如何传递这个(第二个可选)参数。