我正在尝试对 in 进行一些string
操作rjxs
,虽然我可以string
通过类和array
in类的内置行为来完成它,Javascript
但我想将此作为练习来了解rxjs
和理解流利的代码流更好的。
为此,我必须找到一种适合解决方案的方法,而不是像我在大多数示例fluent
中看到的一系列变量分配。rxjs
本质上,情况就是这样;我有一串文字;
const example = `
key || value
key || value
key || value
value
value
value
key || key[key1] = value | key[key2] = value
key || value
`;
我需要做的第一件事是使用string.split('\n')
创建一个字符串数组,以便我可以遍历每一行并执行进一步的操作。
example.string.split('\n')
确实给出了预期的结果,但是尝试将其发送到rxjs
开始得到相当混合的收益。使用该pipe
方法,我知道我将结果rxjs
作为发送到Observable
,但是我在掌握如何从那里真正处理它而不过度嵌套到map
运算符中时遇到了非常麻烦的时间。
例如,如果我这样做...
of(example.string.split('\n')).pipe(
map(results => results.toString().split('||')),
map(results => ... ),
...
).subscribe();
我可以开始了解我正在寻找的东西,但我真正想做的是......
of(example).pipe(
split('\n'),
split('||'),
concatMap(results => ...)
).subscribe();
阅读 上的文档lettable operators
,看到这里,看起来这应该是一件很容易创建的事情。从理论上讲,它在我的脑海中应该是这样的;
const split = (separator: string) => <T>(source: Observable<T>) =>
new Observable(observer => {
source.subscribe({
next(x) { observer.next(x.toString().split(separator)); },
error(err) { observer.error(err); },
complete() { observer.complete(); }
})
});
所以这应该使整个代码足够明显;
of(example).pipe(
split('\n')
).subscribe(result => console.log(`[n]::${result}`));
但这并没有给我我真正的期望。我希望得到一条array
线,但如果我输出它,我会得到......
[n]::, 键 || 值,键 || 值,键 || 值, ,
值, 值, , 值, 键 || 键[键1] = 值 | 键[键2] = 值,键 || 价值,
我真的不清楚我做错了什么,在这里。由于很难rxjs
在大多数代码游乐场中进行演示,例如plunkr
or jsfiddle
,至少据我所知,我已经准备了一个游乐场环境来演示我的工作stackblitz
,如果它有帮助的话。
您将在playground/index.ts
文件中找到所有相关代码。我已经尽我所能来抽象出对角度知识的需求,因为我煞费苦心地指定了应该单独保留的部分,以使其继续在右侧显示输出。如果您不知道 angular,但可以提供帮助rxjs
,那么您应该能够在不干扰该设置的情况下工作。