Functional Extensions for Javascript
Clone or download
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
Concurrency string 추가, 함수명 변경 Jan 21, 2019
Lazy string 추가, 함수명 변경 Jan 21, 2019
test stopIf, stopVal 추가 Jan 19, 2019
.gitignore node_modules폴더 gitignore 추가 Jan 15, 2019
C.js string 추가, 함수명 변경 Jan 21, 2019
L.js string 추가, 함수명 변경 Jan 21, 2019
LICENSE Initial commit Aug 26, 2018
README.md takeLazy, takeUntilLazy, takeWhileLazy, intervalLazy 등 추가 Jan 20, 2019
baseCalls.js - 코드 정리 Jan 19, 2019
baseExtend.js - 코드 정리 Jan 19, 2019
basePick.js - 코드 정리 Jan 19, 2019
baseSel.js - 코드 정리 Jan 19, 2019
baseSortBy.js - 코드 정리 Jan 19, 2019
call.js - 코드 정리 Jan 19, 2019
calls.js string 추가, 함수명 변경 Jan 21, 2019
constant.js - 코드 정리 Jan 19, 2019
countBy.js - 코드 정리 Jan 19, 2019
curry.js - 코드 정리 Jan 19, 2019
deepFlat.js - 코드 정리 Jan 19, 2019
defaults.js - 코드 정리 Jan 19, 2019
delay.js takeLazy, takeUntilLazy, takeWhileLazy, intervalLazy 등 추가 Jan 20, 2019
each.js - 코드 정리 Jan 19, 2019
empty.js - 코드 정리 Jan 19, 2019
entries.js - 코드 정리 Jan 19, 2019
every.js - 코드 정리 Jan 19, 2019
extend.js - 코드 정리 Jan 19, 2019
filter.js - 코드 정리 Jan 19, 2019
find.js - 코드 정리 Jan 19, 2019
findWhere.js - 코드 정리 Jan 19, 2019
flat.js - 코드 정리 Jan 19, 2019
flatMap.js - 코드 정리 Jan 19, 2019
fx.js string 추가, 함수명 변경 Jan 21, 2019
go.js - 코드 정리 Jan 19, 2019
go1.js - 코드 정리 Jan 19, 2019
goS.js - 코드 정리 Jan 19, 2019
groupBy.js - 코드 정리 Jan 19, 2019
has.js - 코드 정리 Jan 19, 2019
head.js - 코드 정리 Jan 19, 2019
hi.js - 코드 정리 Jan 19, 2019
identity.js - 코드 정리 Jan 19, 2019
index.js remove esm cache Dec 13, 2018
indexBy.js - 코드 정리 Jan 19, 2019
isArray.js - 코드 정리 Jan 19, 2019
isFunction.js - 코드 정리 Jan 19, 2019
isIterable.js - 코드 정리 Jan 19, 2019
isMatch.js - 코드 정리 Jan 19, 2019
isString.js - 코드 정리 Jan 19, 2019
isUndefined.js - 코드 정리 Jan 19, 2019
keys.js - 코드 정리 Jan 19, 2019
last.js - 코드 정리 Jan 19, 2019
log.js - 코드 정리 Jan 19, 2019
map.js - 코드 정리 Jan 19, 2019
mapEntries.js string 추가, 함수명 변경 Jan 21, 2019
match.js - 코드 정리 Jan 19, 2019
max.js - 코드 정리 Jan 19, 2019
maxBy.js - 코드 정리 Jan 19, 2019
min.js - 코드 정리 Jan 19, 2019
minBy.js - 코드 정리 Jan 19, 2019
negate.js - 코드 정리 Jan 19, 2019
noop.js - 코드 정리 Jan 19, 2019
nop.js - 코드 정리 Jan 19, 2019
not.js - 코드 정리 Jan 19, 2019
object.js - 코드 정리 Jan 19, 2019
omit.js - 코드 정리 Jan 19, 2019
package.json string 추가, 함수명 변경 Jan 21, 2019
pick.js - 코드 정리 Jan 19, 2019
pipe.js - 코드 정리 Jan 19, 2019
pipeS.js - 코드 정리 Jan 19, 2019
pluck.js - 코드 정리 Jan 19, 2019
reduce.js - 코드 정리 Jan 19, 2019
reduceS.js - 코드 정리 Jan 19, 2019
reject.js - 코드 정리 Jan 19, 2019
sel.js - 코드 정리 Jan 19, 2019
some.js - 코드 정리 Jan 19, 2019
sort.js - 코드 정리 Jan 19, 2019
sortBy.js - 코드 정리 Jan 19, 2019
sortByDesc.js - 코드 정리 Jan 19, 2019
sortDesc.js - 코드 정리 Jan 19, 2019
stop.js - 코드 정리 Jan 19, 2019
stopIf.js stopIf, stopVal 추가 Jan 19, 2019
strMap.js string 추가, 함수명 변경 Jan 21, 2019
string.js string 추가, 함수명 변경 Jan 21, 2019
tail.js - 코드 정리 Jan 19, 2019
take.js - 코드 정리 Jan 19, 2019
take1.js - 코드 정리 Jan 19, 2019
takeAll.js - 코드 정리 Jan 19, 2019
takeUntil.js - 코드 정리 Jan 19, 2019
takeWhile.js - 코드 정리 Jan 19, 2019
tap.js - 코드 정리 Jan 19, 2019
toIter.js - 코드 정리 Jan 19, 2019
unique.js - 코드 정리 Jan 19, 2019
uniqueBy.js - 코드 정리 Jan 19, 2019
values.js - 코드 정리 Jan 19, 2019

README.md

FxJS - Functional Extensions for Javascript

FxJS는 자바스크립트의 기본 값을 이용하고, 이터러블 프로그래밍과 Promise를 강조한 함수형 프로그래밍 라이브러리입니다.

iterable

const res = go(
  L.range(Infinity),
  L.filter(a => a % 2),
  L.take(3),
  reduce(add));

log(res); // 9

iterable + time

go(
  L.range(Infinity),
  L.map(delay(1000)),
  L.map(a => a + 10),
  L.take(3),
  each(log));
// 1초 후 10
// 2초 후 11
// 3초 후 12

iterable + time + Promise

// L.interval = time => L.map(delay(time), L.range(Infinity));

(async () => {
  await go(
    L.interval(1000),
    L.map(a => a + 30),
    L.takeUntil(a => a == 33),
    each(log));
  // 1초 후 30
  // 2초 후 31
  // 3초 후 32
  // 4초 후 33

  const res = await go(
    L.interval(1000),
    L.map(a => a + 20),
    L.takeWhile(a => a < 23),
    L.map(tap(log)),
    reduce(add));
  // 5초 후 20
  // 6초 후 21
  // 7초 후 22

  log(res);
  // 63
} ());

설치

npm i fxjs2

목차

map

map(a => a + 10, [1, 2, 3]);
// [11, 12, 13]

filter

filter(a => a % 2, [1, 2, 3]);
// [1, 3]

reduce

const add = (a, b) => a + b
reduce(add, [1, 2, 3]);
// 6

reduce(add, 10, [1, 2, 3]);
// 16

reduce(add, {a: 1, b: 2, c: 3});
// 6

await reduce(add, [Promise.resolve(1), 2, 3])
// 6

take

take(1, [1, 2, 3]);
// [1]

take(2, [1, 2, 3])
// [1, 2]

L.map

const iterator = L.map(a => a + 10, [1, 2, 3]);
take(2, iterator);
// [11, 12]

L.filter

const iterator = L.filter(a => a % 2, [1, 2, 3, 4, 5]);
take(2, iterator);
// [1, 3]
const iterator = L.filter(a => a % 2, L.map(a => a + 10, [1, 2, 3, 4, 5]));
take(2, iterator);
// [11, 13]

go + try catch + 비동기 에러 핸들링

const b = go(
  0,
  a => a + 1,
  a => a + 10,
  a => a + 100);

console.log(b);
// 111

try {
  const b = go(
    0,
    a => { throw { hi: 'ho' } },
    a => a + 10,
    a => a + 100);

  console.log(b);
} catch (c) {
  console.log(c);
}
// { hi: 'ho' }

const b = await go(
  0,
  a => Promise.resolve(a + 1),
  a => a + 10,
  a => a + 100);

console.log(b);
// 111

try {
  const b = await go(
    0,
    a => Promise.resolve(a + 1),
    a => Promise.reject({ hi: 'ho' }),
    a => a + 100);

  console.log(b);
} catch (c) {
  console.log(c);
}
// { hi: 'ho' }

try {
  const b = await go(
    0,
    a => Promise.resolve(a + 1),
    a => Promise.reject({ hi: 'ho' }),
    a => a + 100);

  console.log(b);
} catch (c) {
  console.log(c);
}
// { hi: 'ho' }

stop

const f1 = pipeS(
  a => a % 2 ? stop(a) : a,
  a => a + 10);
f1(1); // 1
f1(2); // 12

goS({a: 1, b: 2},
  stopIf({a: 1}),
  ({a, b}) => ({a: a + 10, b})); // {a: 1, b: 2}

goS({a: 2, b: 2},
  stopIf({a: 1}),
  ({a, b}) => ({a: a + 10, b})); // {a: 12, b: 2}

goS({a: 1, b: 2},
  stopIf({a: 1}, null),
  ({a, b}) => ({a: a + 10, b}));
// null