【问题标题】:creating lettable rxjs "string.split" operator创建 lettable rxjs "string.split" 运算符
【发布时间】:2018-01-02 23:25:54
【问题描述】:

我正在尝试在rjxs 中进行一些string 操作,虽然我可以通过string 类和@ 中的array 类的内置行为来完成它987654327@,我想以此作为练习,进一步了解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 方法,我知道我将结果作为Observable 发送到rxjs,但是我很难掌握如何从那里真正处理它而不过度嵌套到map 运算符中.

例如,如果我这样做...

of(example.string.split('\n')).pipe(
   map(results => results.toString().split('||')),
   map(results => ... ),
   ...
).subscribe();

可以开始了解我正在寻找的东西,但我真正想做的是......

of(example).pipe(
   split('\n'),
   split('||'),
   concatMap(results => ...)
).subscribe();

阅读documentation on lettable operators, seen here,看起来这应该是一件很容易创建的事情。理论上我的想法应该是这样的;

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] = 值,键 ||价值,

我真的不清楚我做错了什么,在这里。由于很难在大多数代码游乐场(如plunkrjsfiddle)中演示rxjs,至少据我所知,我已经准备了一个游乐场环境来演示我在stackblitz 上的工作,如果有帮助的话。

您将在playground/index.ts 文件中找到所有相关代码。我已尽我所能抽象出对角度的任何知识的需求,因为我煞费苦心地指定了应该单独保留的部分,以使其继续在右侧显示输出.如果您不了解 Angular,但可以通过 rxjs 提供帮助,您应该能够在不干扰该设置的情况下工作。

STACKBLITZ PLAYGROUND

【问题讨论】:

    标签: rxjs rxjs5 rxjs-lettable-operators


    【解决方案1】:

    您的代码运行良好,只是 es6 模板字符串 ${} 将您的数组扁平化为字符串。如果您使用 console.dir 或记录结果,您将看到检索到的正确数组。

    【讨论】:

    • 但如果我在split 之后调用map,就好像它不是真正的string[]
    • stackblitz.com/edit/… 请在控制台查看您的分叉版本
    猜你喜欢
    • 2018-05-13
    • 2018-05-01
    • 2018-06-10
    • 1970-01-01
    • 2018-04-01
    • 2018-08-14
    • 1970-01-01
    • 2020-02-12
    相关资源
    最近更新 更多