Фронтенд розробка JavaScript. / Модульна система Typescript. / Пракрикум. Знаходження спільного дільника.

Знаходження спільного дільника.

Створюємо потік

import { range } from 'rxjs';

const CONST1 = 20;

const stream1 = range(1,CONST1);

Перетворимо на масив і сортуємо.

...
import { toArray, map } from 'rxjs/operators';

stream1
.pipe(toArray(),map(arr=>arr.sort((a,b) => b-a)))
.subscribe((el) => {
    console.log(el);
})

Перемикаємось на другий потік з масиву і вибираємо з нього все, що ділиться без залишку.

stream1
.pipe(
    toArray(),
    map(arr=>arr.sort((a,b) => b-a)),
    switchMap( (rez) => from(rez)
                        .pipe(filter((el: any) => CONST1%el === 0))
    )
)
.subscribe((el) => {
    console.log(el);
})

Оформляємо 2 потоки..

const CONST1 = 20;
const CONST2 = 50;

const stream1 = range(1,CONST1)
.pipe(
    toArray(),
    map(arr=>arr.sort((a,b) => b-a)),
    switchMap( (rez) => from(rez)
                        .pipe(filter((el: any) => CONST1%el === 0))
    )
);

const stream2 = range(1,CONST2)
.pipe(
    toArray(),
    map(arr=>arr.sort((a,b) => b-a)),
    switchMap( (rez) => from(rez)
                        .pipe(filter((el: any) => CONST2%el === 0))
    )
);


stream1.subscribe((el) => {
    console.log(`stream1 = ${el}`);
})

stream2.subscribe((el) => {
    console.log(`stream2 = ${el}`);
})

Створюємо 3 потік, де вибираємо збігаються елементи, перемикаючись на другий потік, переводимо їх в масив і отримуємо найбільше.

const stream3 = stream1.pipe(
    switchMap((el1) => stream2.pipe(filter((el2) => el2 === el1))),
    toArray()
).subscribe((el) => {
    console.log(Math.max(...el));
})

Повний код прикладу.

import { from } from 'rxjs';
import { range } from 'rxjs';
import { toArray, map, switchMap, filter } from 'rxjs/operators';

const CONST1 = 20;
const CONST2 = 50;

const stream1 = range(1,CONST1)
.pipe(
    toArray(),
    map(arr=>arr.sort((a,b) => b-a)),
    switchMap( (rez) => from(rez)
                        .pipe(filter((el: any) => CONST1%el === 0))
    )
);

const stream2 = range(1,CONST2)
.pipe(
    toArray(),
    map(arr=>arr.sort((a,b) => b-a)),
    switchMap( (rez) => from(rez)
                        .pipe(filter((el: any) => CONST2%el === 0))
    )
);

const stream3 = stream1.pipe(
    switchMap((el1) => stream2.pipe(filter((el2) => el2 === el1))),
    toArray()
).subscribe((el) => {
    console.log(Math.max(...el));
})