Фронтенд розробка 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));
})