RXJS5 - 按每个对象包含的可观察性过滤对象数组
rxjs5 - filtering array of objects by observable that each object contains
我有一个看起来像这样的数组
[
{
name: 'foo'
filter: Observable.of(true)
},
{
name: 'bar'
filter: Observable.of(false)
}
]
并且我只想返回其filter
解析为 true 的项目,我将如何以最有效和反应性的方式执行此操作?我正在使用 rxjs5 beta2。
请注意,为了
简单起见,它是一个伪代码,在我的真实情况下,过滤器实际上是一个对象,它被传递给验证函数,该函数返回一个在true
或false
中解析的可观察量。
可以将数组中的每个项平面映射到可观察流,该流将发出将Observable<bool>
类型的 filter
属性替换为 bool
属性的项的版本。
const data$ = Rx.Observable.from(arr)
// Convert each item's filter property to type bool
.flatMap(x => x.filter.map(condition => Object.assign({}, x, { filter: condition })))
// Now we can just filter over the filter property, which is of type bool.
.filter(x => x.filter)
// Each item emitted will have a filter value of true
.subscribe(x => console.log(x));
RxJS 4 中有两件事使这变得简单:map 和 Rx.helpers.defaultComparer。 第一个映射分别发送可迭代对象的每个项目,默认比较器将为您进行深度检查。
var comparer = Rx.helpers.defaultComparer;
const Observable = Rx.Observable;
const arr = [
{
name: 'foo',
filter: Observable.of(true)
},
{
name: 'bar',
filter: Observable.of(false)
}
];
const data$ = Observable.from(arr)
.map(each => each)
.filter(each => comparer(each.filter, Observable.of(true)))
.subscribe(x => console.log(x));
// prints Object {name: "foo", filter: FromArrayObservable} to my console
由于某种原因,这个默认比较器目前不在五个中。 也许帮助程序有一个新名称,因为它在 4 中没有被弃用,或者它还没有被迁移或不在 .helpers 中。
相关文章:
- 如何收集Knockout可观察性以放入JSON
- 将js对象更改为使用嵌套的可观察数组敲除js视图模型
- 如何从具有动态可观察属性的淘汰对象中获取 JSON 字符串
- 培根.js Bus.plug: 未捕获 错误: 不是可观察的 : [对象对象]
- 在隐藏值上调用 jQuery .trigger('change') 会破坏与 KNOCKOUT 相关的可观察性
- 使用rxjs创建一个可观察的对象,该对象稍后将连接到web套接字
- Knockout.js性能-有多少可观察性
- Knockoutjs当父对象's可观察到的变化
- 在ko.applyBindings(..)中执行Knockout js订阅函数(用于可观察对象)
- Knockout.js:在可选定义的值上计算可观察性
- 如何使用ES6在Ember中声明可观察性或计算属性
- RXJS5 - 按每个对象包含的可观察性过滤对象数组
- Angular2 Http 请求返回没有映射方法的可观察性
- 在数据绑定表达式中,何时使用或不使用带可观察性的括号
- 在knockoutjs中计算的可观察性;更改时不更新
- 如何增加knockout.js的可观察性
- 如何通过多个$.ajax调用实现异步计算可观察性
- 敲除绑定顺序/不带可观察性
- knockoutjs:计算级联数组(复杂视图模型)中的可观察性和this指针
- 使用计算的可观察性的对象范围