RxJS谷歌地图标记

时间:2017-07-18 15:51:21

标签: rxjs reactivex

我尝试使用"Google Map" MarkersRxJS observables

从DataBase中仅检索新的jQuery $.ajax

我每5秒收到一次标记数组。 当数组中的数据被更改,即附加了新标记时,我只需要过滤掉新的标记。

var oldArray = [["ObjA",3455,643523,2],["ObjB",5346,2134,1],["ObjC",5341,7135,0]];
var newArray = [["ObjA",3455,643523,2],["ObjD",2384,4791,3],["ObjB",5346,2134,1],["ObjC",5341,7135,0],["ObjF",2631,7228,4]];

newArray开始,我需要过滤掉["ObjD",2384,4791,3]["ObjF",2631,7228,4]

我不知道如何做到这一点,并且可以通过仅使用RxJS来完成。

如果有人能引导我朝着正确的方向前进,我真的很感激!

var observable = Rx.Observable
  .interval(5000)
  .flatMap(function() {
    return Rx.Observable
      .from($.ajax({url: "https://somedomain.com/json"}).promise())
  })
  .filter(x => !!x === true)
  .distinctUntilChanged();


observable.subscribe((response) => {
      var newMarker = $.parseJSON(response.data);                    
});

1 个答案:

答案 0 :(得分:2)

对于处理数组,你不需要RxJS,你可以在ES6中使用新的数组运算符:

onlyNewArray = 
    newArray
        .filter(newItem => 
            !oldArray.some(oldItem => oldItem[0] === newItem[0]));

some()将逐个遍历数组中的项目,如果符合条件,它将返回true。在这里,我们检查newArray中的每个项目是否都存在于旧版本中,如果它们不包含在onlyNewArray

<强>更新

这将检查oldItem中的所有项目是否都与{{​​1}}中的相应项目相同:

newItem

更新2

要仅检查数组的连续部分,可以先将其切片:

onlyNewArray = 
    newArray
        .filter(newItem => 
            !oldArray.some(oldItem => 
                oldItem.every((prop, index) =>
                    prop === newItem[index])));

或者,您可以提供跳过索引,然后使用简单的onlyNewArray = newArray .filter(newItem => !oldArray.some(oldItem => oldItem .slice(0,3) .every((prop, index) => prop === newItem[index]))); 子句:

if/else