7. ReactiveX

Reactive X 란 스트림을 비동기적이고 함수적인 방식으로 처리할 수 있도록 도와주는 라이브러리이다.

예시 stackblitz

import { from, of } from 'rxjs';
import { map, groupBy, mergeMap, toArray } from 'rxjs/operators';

const people = [
{ name: 'Sue', age: 25 },
{ name: 'Joe', age: 30 },
{ name: 'Frank', age: 25 },
{ name: 'Sarah', age: 35 }
];

let p = from(people);
p.pipe(map((v) => { v.age++; return v;})).subscribe((v) => {
console.log(JSON.stringify(v));
})

7.1. Group by

groupby 연산자는 스트림의 데이터를 특정 기준에 따라 묶어서 여러개의 스트림으로 만들어주는 연산자이다.

예시 `stackblitz<https://stackblitz.com/edit/typescript-qnjjnv?file=index.ts>`_:

import { from, of } from 'rxjs';
import { groupBy, mergeMap, toArray, count, switchMap,reduce } from 'rxjs/operators';

const people = [
    { name: 'Sue', age: 25 },
    { name: 'Joe', age: 30 },
    { name: 'Frank', age: 25 },
    { name: 'Sarah', age: 35 }
];

const source = from(people);
//group by age
const example = source.pipe(groupBy(person => person.age)).subscribe((eachOb) => {
    eachOb.pipe(reduce((acc, v) => {
        acc.push(v);
        return acc;
    }, [])).subscribe((arr) => {
        console.log(JSON.stringify(arr))
    })
});

/* Output:
    [{"name":"Sue","age":25},{"name":"Frank","age":25}]
    [{"name":"Joe","age":30}]
    [{"name":"Sarah","age":35}]
*/