【发布时间】:2015-02-04 20:02:08
【问题描述】:
使用 rxjs,我得到了一个可观察的浮点数序列。现在我想过滤掉流中较小的变化,并且只在它比之前发出的值大一定数量时才发出一个值。
换句话说:序列中的第一个值总是被发出。然后,每个发出的(=未过滤的)值应该至少比之前发出的值大delta。任何不符合该条件的值都会被过滤掉。
我已经想出了一个解决方案,如上所述:
var obs = Rx.Observable.create(function(observer) {
/* ... */
});
var last;
obs.map(function(value) {
if (last === undefined) {
last = value;
return value;
} else {
var threshold = 0.5,
delta = Math.abs(last - value);
if (delta > threshold) {
last = value;
return value;
}
else {
return undefined;
}
}
}).
filter(function(value) {
return value !== undefined;
});
我是 rxjs 和响应式编程的新手,我认为上述解决方案过于复杂。更重要的是,它违反了响应式编程的原则,即不要在组合管道之外保存状态。但我这样做了,因为我正在通过 last 变量跟踪并希望摆脱它。
我该如何解决这个问题并以被动的方式做到这一点?
【问题讨论】:
标签: javascript reactive-programming rxjs