-3

I have this code that works just fine:

(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));
})();

Now I want it to be converted to:

A.

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));
})();

And B (where fizzBuzzer is some different type of function):

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

1 Answers1

1

Your question isn't vey clear, but here is some of what you might do:

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);

Aside:

Here's a fizzBuzz that doesn't need an intermediate object:

const fizzBuzz = map((n: number) => 
  n % 15 === 0 ? "fizzbuzz" :
  n % 5 === 0 ? "buzz" :
  n % 3 === 0 ? "fizz" : n
);
Mrk Sef
  • 2,913
  • 3
  • 13