Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 两个观测值的差分_Arrays_Rxjs_Diff_Observable_Array Difference - Fatal编程技术网

Arrays 两个观测值的差分

Arrays 两个观测值的差分,arrays,rxjs,diff,observable,array-difference,Arrays,Rxjs,Diff,Observable,Array Difference,我正在寻找一种区分两个可见光的最佳方法。 ObservableA中的过滤值应在ObservableB完成后立即发出,而无需等待ObservableA完成 可观测常数a=Rx.可观测间隔(2000).取(10)//0,1,2,3,4,5,6,7,8,9 const observable_b=Rx.observable.interval(1000).map(x=>x+3).take(5)//3,4,5,6,7 someDiffObservable(observable\u a,observabl

我正在寻找一种区分两个可见光的最佳方法。 ObservableA中的过滤值应在ObservableB完成后立即发出,而无需等待ObservableA完成


可观测常数a=Rx.可观测间隔(2000).取(10)//0,1,2,3,4,5,6,7,8,9
const observable_b=Rx.observable.interval(1000).map(x=>x+3).take(5)//3,4,5,6,7
someDiffObservable(observable\u a,observable\u b).subscribe(console.log)//应输出0,1,2,8,9

目前,我提出了以下函数来区分两个观测值

有没有更简单/更快/更好的方法来实现这一点


可观测常数a=Rx.可观测间隔(2000).取(10)//0,1,2,3,4,5,6,7,8,9
const observable_b=Rx.observable.interval(1000).map(x=>x+3).take(5)//3,4,5,6,7
函数observediff(a、b、过滤器){
如果(!过滤器){
过滤器=(值到检查,黑名单数组)=>{
返回黑名单数组。indexOf(要检查的值)=-1;
};
}
返回Rx.observate.create(observator=>{
设a_值=[];
设b_值=[];
设a_completed=false;
设b_completed=false;
a、 forEach(a_值=>{
如果(b_完成){
if(过滤器(a_值、b_值)){
下一步(a_值);
}
}否则{
a_值。推送(a_值);
}
}).然后(()=>{
a_completed=true;
如果(b_完成){
observer.complete();
}
});
b、 forEach(b_值=>{
推送(b_值);
}).然后(()=>{
b_completed=真;
a_值。forEach(a_值=>{
if(过滤器(a_值、b_值)){
下一步(a_值);
}
});
a_值=[];
如果(a_完成){
observer.complete();
}
});
});
}
observediff(observediff,observediff,observediff),subscribe(console.log)//0,1,2,8,9

目前,我提出了以下函数来区分两个观测值

有没有更简单/更快/更好的方法来实现这一点


可观测常数a=Rx.可观测间隔(2000).取(10)//0,1,2,3,4,5,6,7,8,9
const observable_b=Rx.observable.interval(1000).map(x=>x+3).take(5)//3,4,5,6,7
函数observediff(a、b、过滤器){
如果(!过滤器){
过滤器=(值到检查,黑名单数组)=>{
返回黑名单数组。indexOf(要检查的值)=-1;
};
}
返回Rx.observate.create(observator=>{
设a_值=[];
设b_值=[];
设a_completed=false;
设b_completed=false;
a、 forEach(a_值=>{
如果(b_完成){
if(过滤器(a_值、b_值)){
下一步(a_值);
}
}否则{
a_值。推送(a_值);
}
}).然后(()=>{
a_completed=true;
如果(b_完成){
observer.complete();
}
});
b、 forEach(b_值=>{
推送(b_值);
}).然后(()=>{
b_completed=真;
a_值。forEach(a_值=>{
if(过滤器(a_值、b_值)){
下一步(a_值);
}
});
a_值=[];
如果(a_完成){
observer.complete();
}
});
});
}
observediff(observediff,observediff,observediff),subscribe(console.log)//0,1,2,8,9
试试这个:

const a$=Rx.Observable.interval(2000).take(10.share();
常数b$=Rx.可观测间隔(1000).map(x=>x+3).take(5);
Rx.可观察的(
美元缓冲区(
b$.startWith(null).last().concat(a$)
), 
b$.toArray(),
(aItems,bItems)=>aItems.filter(a=>!bItems.includes(a))
)
.concatMap(filteredItems=>Rx.Observable.from(filteredItems))
.subscribe(console.log)
试试这个:

const a$=Rx.Observable.interval(2000).take(10.share();
常数b$=Rx.可观测间隔(1000).map(x=>x+3).take(5);
Rx.可观察的(
美元缓冲区(
b$.startWith(null).last().concat(a$)
), 
b$.toArray(),
(aItems,bItems)=>aItems.filter(a=>!bItems.includes(a))
)
.concatMap(filteredItems=>Rx.Observable.from(filteredItems))
.subscribe(console.log)

当可观测B是空的完成流时,此解决方案无法正常工作。捕捉不错。这是因为最后一个()运算符,它至少需要一个值。我通过使用“startWith”操作符添加一个伪值来修复它。当可观测B是空的完成流时,该解决方案无法正常工作。捕捉不错。这是因为最后一个()运算符,它至少需要一个值。我通过使用“startWith”操作符hi添加一个伪值来修复它,我想向未来的读者指出,虽然该算法可以很好地找到a中哪些元素不存在于B中(如原始帖子中所要求的),但它并不是完全不同,因为相反的情况并不成立。如果交换可观测_a和可观测_b,由于[3,7]元素范围包含在[0,9]范围内,因此根本不会发射任何东西。一个真正的差异要么需要两个不同的输出,要么需要一个具有不同属性的对象来识别存在于每个输出中而不存在于另一个输出中的内容(什么是ad)