获取当前所选项目或从项目列表中获取null

时间:2016-11-21 12:45:04

标签: rxjs

给出项目清单

items = [
  {id: 1, selected: false},
  {id: 2, selected: false}
]

如何构造一个可观察的选择器,该选择器返回当前具有selected = true的项目,如果没有选择项目则返回null?

首次尝试

items
.flatMap(item => item)
.filter(item => item.selected)
.startWith(null)

在初始加载和选择项目时正常工作。但是一旦所有项目再次被取消选择,它就不会发出null - 这是有道理的,因为filter()运算符没有通过。我在这里缺少的是能够设置' null'作为在这种情况下会发出的后备默认值。

第二次尝试,使用带默认值的first()' null':

items
.flatMap(item => item)
.first(item => item.selected, null)

这在初始加载时也能正常工作,但它不会在任何后续更改事件上执行。据我所知,这是因为first()在初始运行完成后完成了流。

最终(工作)尝试

items
.map((items) => {
  selectedItems = items.filter(item => item.selected);
  return selectedItems.length ? selectedItems : [null] 
})
.flatMap(item => item)

这就是我需要的,但是我想知道是否还有其他方法只使用rxjs运算符来表达这种逻辑?

1 个答案:

答案 0 :(得分:0)

您正在寻找可以发出当前状态(或切换)的scan运算符。看到这个jsfiddle几乎可以做你想要的东西(根据状态和返回当前状态过滤项目)https://jsfiddle.net/crunchie84/n1x06016/6/

相关问题