【问题标题】:How do I modify a given rxjs function? [closed]如何修改给定的 rxjs 函数? [关闭]
【发布时间】:2021-03-17 19:41:39
【问题描述】:

我有这段代码可以正常工作:

(function fizzbuzz() {
    range(1, 31)
    .pipe(
        map(num => ({ num, val: num % 3 === 0 ? 'fizz' : '' })),
        map(({ num, val }) => ({ num, val: num % 5 === 0 ? val + 'buzz' : val })),
        map(({ num, val }) => val || num)
    )
    .subscribe(x => console.log(x));
})();

现在我希望将其转换为:

一个。

const fizzBuzz = o => o.pipe(
    map(num => ({ num, val: num % 3 === 0 ? 'fizz' : '' })),
    map(({ num, val }) => ({ num, val: num % 5 === 0 ? val + 'buzz' : val })),
    map(({ num, val }) => val || num)
);

(function fizzbuzz() {
    fizzBuzz(range(1, 31)).subscribe(x => console.log(x));
})();

和 B(其中 fizzBu​​zzer 是一些不同类型的函数):

(function fizzbuzz() {
    range(1, 31).fizzBuzzer().subscribe(x => console.log(x));
})();

【问题讨论】:

  • 你的问题是什么

标签: javascript rxjs reactivex


【解决方案1】:

你的问题不是很清楚,但这里有一些你可能会做的事情:

const fizzBuzz = pipe(
  map((num: number) => ({ num, val: num % 3 === 0 ? "fizz" : "" })),
  map(({ num, val }) => ({ num, val: num % 5 === 0 ? val + "buzz" : val })),
  map(({ num, val }) => val || num)
);

const fizzBuzzOn = (obs: Observable<number>) => obs.pipe(fizzBuzz);

// A
fizzBuzzOn(range(1,31)).subscribe(console.log);

const fizzBuzzer = () => fizzBuzz;

// B
range(1, 31).pipe(
  fizzBuzzer()
).subscribe(console.log);

旁白:

这是一个不需要中间对象的 fizzBu​​zz:

const fizzBuzz = map((n: number) => 
  n % 15 === 0 ? "fizzbuzz" :
  n % 5 === 0 ? "buzz" :
  n % 3 === 0 ? "fizz" : n
);

【讨论】:

    猜你喜欢
    • 2019-07-15
    • 1970-01-01
    • 2016-04-17
    • 2018-08-22
    • 2013-03-10
    • 1970-01-01
    • 2018-04-18
    • 2014-01-24
    • 1970-01-01
    相关资源
    最近更新 更多