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文档中的操作符:谢谢!你是我的救世主!