代码之家  ›  专栏  ›  技术社区  ›  Alex X

RxJS谷歌地图标记

  •  0
  • Alex X  · 技术社区  · 7 年前

    我只想检索新的 "Google Map" Markers RxJS observables 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 回复  |  直到 7 年前
        1
  •  2
  •   Jon G Stødle    7 年前

    对于处理阵列,您不需要RxJS,可以在ES6中使用新的阵列运算符:

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

    some() newArray onlyNewArray


    使现代化

    oldItem 等于中的相应项 newItem :

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

    更新2

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

    if/else 条款:

    let dontCheck = 1;
    
    onlyNewArray = 
        newArray
            .filter(newItem => 
                !oldArray.some(oldItem => 
                    oldItem.every((prop, index) => {
                        if(index == dontCheck){
                            return true;
                        } else {
                            prop === newItem[index]
                        }
                    })));