공부하는 블로그

FP 비교 본문

자바스크립트

FP 비교

devtimothy 2020. 1. 3. 23:01

인프런의 FP 강좌를 보다가 URL 쿼리문을 작성하는 내용을 보고 다른 함수형 라이브러리들은 어떤가 살펴보기 위해서 살짝 끄적여보았다.
아래 나온 obj1 변수를 파싱해서 a=1&c=CC&d=DD 로 결과를 내는 함수를 만드는 것이다. 단 bundefined 이니까 제외한다.

순수 JS, lodash, ramda 에서 쓰임새가 어떤지를 맛보고자 하는 것이기에 특별한 내용이나 설명이 있지는 않다.

순수 JS

const obj1 = {
  a: 1,
  b: undefined,
  c: 'CC',
  d: 'DD'
};

console.log(
    Object
  .entries(obj1)
  .filter(([_,v]) => v !== undefined)
  .map(([k, v]) => `${k}=${v}`)
  .join('&')
)

ramda.js

풀이 1

console.log(
  R.pipe(
    R.toPairs,
    R.reject(([_, v]) => v === undefined),
    R.map(([k, v]) => `${k}=${v}`),
    R.join('&')
  )(obj1)
)

풀이 2

console.log(
  R.compose(
    R.join('&'),
    R.map(([k, v]) => `${k}=${v}`),
    R.reject(([_, v]) => v === undefined),
    R.toPairs
  )(obj1)
)

compose와 pipe는 흐름이 반대이다.

lodash

console.log(
  _.chain(obj1)
      .toPairs()
      .reject(([_, v]) => v === undefined)
      .map(([k, v]) => `${k}=${v}`)
      .join('&')
      .value()
)

간단하게 해결해보았다. 다음에는 더 복잡한 내용을 다뤄보자.

Comments