Skip to content

Latest commit

ย 

History

History
85 lines (69 loc) ยท 2.15 KB

File metadata and controls

85 lines (69 loc) ยท 2.15 KB

join ํ•จ์ˆ˜์™€ find ํ•จ์ˆ˜

ํ•จ์ˆ˜ํ˜• ๊ฐ•์˜ ์„น์…˜7 ๋‚ด์šฉ ์ •๋ฆฌ - 1
(๊ฐ•์˜๋ช…: ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ๊ณผ JavaScript ES6+ ์œ ์ธ๋™ ๊ฐ•์‚ฌ๋‹˜)

Array.prototype.join๋ณด๋‹ค ๋‹คํ˜•์„ฑ์ด ๋†’์€ joinํ•จ์ˆ˜

Array.prototype.join์€ ๋ฐฐ์—ด๋งŒ ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜์ธ๋ฐ Array.prototype.join๋ณด๋‹ค ๋” ๋‹ค์–‘์„ฑ์ด ๋†’์€ joinํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

// 1. 
// joinํ•จ์ˆ˜๋Š” ๊ธฐ๋ณธ ๊ตฌ๋ถ„์ž๊ฐ€ ','
const join = (sep=',', iter) => 
  reduce((a, b) => `${a}${sep}${b}`, iter); //sep(์„ธํผ๋ ˆ์ดํ„ฐ)์„ a์™€ b์‚ฌ์ด์— ๋„ฃ์–ด์คŒ

// 2.
// ํŒŒ์ดํ”„๋ผ์ธ์—์„œ ์กฐํ•ฉ์„ฑ์ด ์ข‹๊ฒŒ currry ์ ์šฉ
const join = curry((sep=',', iter) => 
  reduce((a, b) => `${a}${sep}${b}`, iter);

const queryStr = pipe(
	Object.entries,
	map(([k, v]) => `${k}=${v}`),
	join('&')
);

log(queryStr({limit: 10, offset: 10, type: 'notice'}));
// limit=10&offset=10&type=notice

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•˜๋ฉด ์‚ฌ์ด์‚ฌ์ด์— ์žˆ๋Š” ํ•จ์ˆ˜๋“ค์„ ๊บผ๋‚ด์„œ ์กฐํ•ฉ์„ฑ, ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋†’๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.

find ํ•จ์ˆ˜

find๋Š” ์ฒซ๋ฒˆ์งธ๋กœ ๋งŒ๋‚œ ํ•˜๋‚˜์˜ ๊ฐ’์„ ๊บผ๋‚ด์ฃผ๋Š” ํ•จ์ˆ˜ take๋ฅผ ์ด์šฉํ•ด์„œ ๊ฒฐ๋ก ์„ ๋งŒ๋“œ๋Š” ํ•จ์ˆ˜๋‹ค.(take๋ฅผ ํ†ตํ•ด ์ดํ„ฐ๋Ÿฌ๋ธ”์„ ๋ฐ›๋Š” ํ•จ์ˆ˜)

const users = [
    {age: 32},
    {age: 31},
    {age: 37},
    {age: 28},
    {age: 25},
    {age: 32},
    {age: 31},
    {age: 37}
  ];

// curry ์ปค๋ง์ ์šฉ
  const find = curry((f, iter) => go(
    iter,
    L.filter(f),
    take(1),
    ([a]) => a));

  log(find(u => u.age < 30)(users));

  go(users,
    L.map(u => u.age),// L.map์€ ์ง€์—ฐ์ ์ธ map
    find(n => n < 30),
    log);

find๊ฐ€ ๋ฐ›๋Š” ๊ฐ’์ด ์ดํ„ฐ๋Ÿฌ๋ธ”์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฐ์‚ฐ์„ ๋‹ค ์™„๋ฃŒํ•œ ๊ฐ’์„ ์ค˜๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ํ‰๊ฐ€์ง€์—ฐ์„ ์‹œํ‚จ ๊ฐ’์„ ์ค˜๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•˜๋‹ค.

go(users,
    map(u => u.age),// ์™„๋ฃŒ๋œ ๊ฐ’์„ ์ค˜๋„
    find(n => n < 30),
    log);

go(users,
    L.map(u => u.age),// L.map์œผ๋กœ ์ง€์—ฐ์ ์ธ map์„ ์ค˜๋„
    find(n => n < 30),
    log);

//find๋Š” L.filter๋ฅผ ํ†ตํ•ด ์ง€์—ฐํ•ด๋†“๊ณ  take๋กœ ์—ฐ์‚ฐํ•˜๋ฏ€๋กœ ์–ด๋–ค๊ฐ’์ค˜๋„ ๊ฐ€๋Šฅ
  const find = curry((f, iter) => go(
    iter,
    L.filter(f),
    take(1),
    ([a]) => a));