我尝试使用"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);
});
答案 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