RxJS谷歌地图标记

RxJS谷歌地图标记,rxjs,reactivex,Rxjs,Reactivex,我正试图通过使用RxJS可观测值和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,21

我正试图通过使用
RxJS可观测值
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”,23844791,3]
[“ObjF”,26317228,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);                    
});

要在阵列上工作,您不需要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]
                    }
                })));

要在阵列上工作,您不需要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]
                    }
                })));

你能把你尝试过的东西和你遇到的困难贴出来吗?@paulpdaniels,谢谢你的回复。我真的很感激。我已经用代码片段更新了我的问题。我一直试图以多种不同的方式完成这项任务,但没有成功。这是我上次尝试的代码。请不要严格地评判我,因为我对RxJS真的很陌生,我会尽我最大的努力以正确的方式快速获得它。再次感谢!因此,你所面临的问题是,一旦你从服务器上取回了数据,你该怎么办?@paulpdaniels,不是真的。我每5秒收到一组标记。我试图解决的任务是当数组中的数据发生更改时,即添加新的标记。例如,我只需要筛选出新的标记。您能否发布一段您尝试过的内容以及遇到的问题?@paulpdaniels,谢谢您的回复。我真的很感激。我已经用代码片段更新了我的问题。我一直试图以多种不同的方式完成这项任务,但没有成功。这是我上次尝试的代码。请不要严格地评判我,因为我对RxJS真的很陌生,我会尽我最大的努力以正确的方式快速获得它。再次感谢!因此,你所面临的问题是,一旦你从服务器上取回了数据,你该怎么办?@paulpdaniels,不是真的。我每5秒收到一组标记。我试图解决的任务是,当数组中的数据发生更改时,例如,添加新标记时,我只需要过滤掉新标记。非常感谢!这确实如预期的那样有效。请告诉我,是否可以按数组中的所有元素进行筛选?这里我们按第一个元素进行过滤,但例如,如果我需要比较数组中的所有元素,或者只按特定元素进行过滤?对不起,我要求太多了。提前谢谢!非常感谢你,乔恩!能否请您也建议如何按特定数组元素进行过滤。[“ObjA”,3455643523,2]例如,我需要按0,1,2进行过滤,但要跳过元素3而不考虑。?非常感谢。或者0,2,3,跳过1。我用两种可能性更新了我的答案。我建议大家阅读Mozilla文档中的操作符:谢谢!你是我的救世主!谢谢!这确实如预期的那样有效。请告诉我,是否可以按数组中的所有元素进行筛选?这里我们按第一个元素进行过滤,但例如,如果我需要比较数组中的所有元素,或者只按特定元素进行过滤?对不起,我要求太多了。提前谢谢!非常感谢你,乔恩!能否请您也建议如何按特定数组元素进行过滤。[“ObjA”,3455643523,2]例如,我需要按0,1,2进行过滤,但要跳过元素3而不考虑。?非常感谢。或者0,2,3,跳过1。我用两种可能性更新了我的答案。我建议大家阅读Mozilla文档中的操作符:谢谢!你是我的救世主!