rxjs树搜索
问题描述:
我是rxjs的新手,需要找到一种算法来通过树中的id查找节点。这是我的最好的方法(可作为公共要点在gistrun):rxjs树搜索
const value= "c.1.3";
const tree= [
{
"id": "c.1",
"children": [
{
"id": "c.1.1"
},
{
"id": "c.1.2"
},
{
"id": "c.1.3"
}
]
}
];
const findTree= (tree)=>Rx.Observable.from(tree)
.mergeMap(node=>{
if(!!node.children)
return findTree(node.children);
return Rx.Observable.of(node);
})
.find(node=>node.id==value);
findTree(tree).subscribe(console.info);
它的失败寻找根源,我想只有走扔匹配的ID开始的叶子和丢弃我发明了车轮。
- 如何维持一级搜索?
- 是否有任何运算符通过正则表达式筛选?
- 任何rxjs运算符都会执行递归查找吗?
非常感谢。
答
好吧,我不会详细介绍你的树例子,但我可以回答你的问题,这可能会帮助你找出一些事情。
我如何保持状态
一个简单的方法来做到这一点,是保存在临时对象
Observable.of(1)
.flatMap(number => Observable.of({ start: number, value: 'a' }))
.subscribe(({start, value}) => console.log(start + '/' + value)); // output: 1/a
是否有运营商通过正则表达式来过滤你的状态?
没有,但你可以自己做很容易像
let names$ = Observable.of('adam', 'amy', 'ben');
let regex = /a.*/;
names$.filter(name => regex.test(name)) // emits: 'adam', 'amy
任何rxjs操作者的递归找到?
是的,有扩展运算符。这是一个简单的例子,它应该引导你的方式
Observable.of(3)
.expand(x => Observable.of(x-1))
.takeWhile(x => x >= 0); // emits: 3, 2, 1, 0
我的第一个问题是,为什么你想让这段代码可观察? –
没有什么特别的需要,因为我试图将所有东西都实现为流。我想知道我是否可以用功能性(不可逆性,无副作用和可声明性)和反应性(反常性)我的树模型的好处来管理,这与标签系统有关,该标签系统将随着时间无限增长。我对这个解决方案有很多解决方法,但我对此很好奇...... – jgpATs2w