ES6+ Basic4
์ธํ๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ JavaScript ES6+ / ์ ์ธ๋
๊ฒฐ๊ณผ๋ฅผ ๋ง๋๋ ํจ์ reduce, take
์ค์ ๋ก ์ฐ์ฐ์ ์์ํ๋ ์์์ ์ ์๋ฆฌ๋ ํจ์
reduce
L.entries = fuction *(obj) {
for (const k in obj) yield [k, obj[k]];
};
// Array.prototype.join๋ณด๋ค ๋คํ์ฑ์ด ๋์ joinํจ์
const join = curry((sep = ',', iter) =>
reduce((a, b) => '${a}${sep}${b}', iter));
// const queryStr = obj => go(
// obj,
const queryStr = pipe(
L.entries,
L.map(([k, v])=> '${k}=${v}'),
join('&');
// Object.entries,
// map(([k, v])=> '${k}=${v}'),
// reduce((a, b) => '${a}&${b}')
);
log(queryStr({ limit: 10, offset:10, type:'notice'}));
take, find
find๋ take๋ฅผ ํตํด ๊ฒฐ๋ก (๊ฒฐ๊ณผ)์ ์ง์ด์ ๋ง๋ค ์ ์์
const users = [
{ age: 32 },
{ age: 43 },
{ age: 34 },
{ age: 25 },
{ age: 21 },
{ age: 38 },
{ age: 23 },
];
// ์ฒซ๋ฒ์งธ๋ก ๋ง๋๋ 1๊ฐ๋ง ๊บผ๋ด์ฃผ๋ ํจ์
const find = curry((f, iter) => go(
iter,
L.filter(f)
take(1)
([a]) => a
));
log(find(u => u.age < 30, users ));
L.map + take๋ก map ๋ง๋ค๊ธฐ
const takeAll = take(Infinity);
L.map = curry(function *(f, iter) {
for (const a of iter) {
yield f(a);
}
});
const map = curry(pipe(L.map, takeAll));
log(map(a => a + 10, L.range(4)));
L.filter + take๋ก filter ๋ง๋ค๊ธฐ
L.filter = curry(fuction *(f, iter) {
for (const a of iter ) {
if (f(a)) yield a;
}
});
const filter = curry(pipe(L.filter, takeAll));
log(filter(a => a % 2, range(4)));
L.flatten
// ๋ฐ๋ก ํ๊ฐ๋๋ flatten ํจ์
const flatten = pipe(L.flatten, takeAll);
const isIterable = a => a && a[Symbol.iterator];
// ๊น์ Iterable์ ๋ชจ๋ ํผ์น ๋
L.deepFlat = function*(iter) {
for (const a of iter) {
if (isIterable(a)) yield *f(a);
else yield a;
}
}
L.flatten = function *(iter) {
for (const a of iter) {
if (isIterable(a)) yield *a;
// if (isIterable(a)) for (const b of a) yield b;
// yield *iterabel = for (const val of iterable) yield val;
else yield a;
}
var it = L.flatten([[1,2], 3, 4, [5, 6], [7, 8, 9]]);
log([...it]);
};
1์ฐจ์ ๋ฐฐ์ด๋ก ๋ง๋ค์ด์ฃผ๋ ์ ๋๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ ํจ์
L.flatMap
// ๋ ๋ฐฉ๋ฒ์ ํฐ ์ฐจ์ด๊ฐ ์์(๋๊ฐ์ด ์ ๋ถ ์ํํ๊ธฐ ๋๋ฌธ)
// ๊ธฐ์กด์ flatmap์ array์์๋ง ๋์ํจ
log([1, 2], [3, 4], [5, 6, 7].flatMap(a => a.map(a => a * a)));
log(flatten([1, 2], [3, 4], [5, 6, 7].map(a => a.map(a => a * a))));
L.flatMap = curry(pipe(L.map, L.flatten));
//์ฆ์ํ๊ฐ
const flatMap = curry(pipe(L.map, flatten));
var if = L.flatMap(map(a => a * a), [[1, 2], [3, 4], [5, 6, 7]]);
log([...it]);
2์ฐจ์ ๋ฐฐ์ด ๋ค๋ฃจ๊ธฐ
const arr = [
[1, 2],
[3, 4, 5],
[6, 7, 8],
[9, 10]
];
go(arr,
L.flatten,
L.filter(a => a % 2),
L.map(a => a * a),
take(3),
reduce(add),
log);
์ง์ฐ์ฑ / ์ดํฐ๋ฌ๋ธ ์ค์ฌ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฌด์ ์ธ ์ฝ๋ ์์
var users = [
{ name: 'a', age: 21, family: [
{ name: 'a1', age: 56 }, { name: 'a2', age: 70 },
{ name: 'a3', age: 15 }, { name: 'a4', age: 3 }
]},
{ name: 'b', age: 38, family: [
{ name: 'b1', age: 34 }, { name: 'b2', age: 5 }
]},
{ name: 'c', age: 31, family: [
{ name: 'c1', age: 68 }, { name: 'c2', age: 62 },
{ name: 'c3', age: 12 }
]},
{ name: 'd', age: 20, family: [
{ name: 'd1', age: 42 }, { name: 'd2', age: 42 },
{ name: 'd3', age: 11 }, { name: 'd4', age: 4 }
]},
]
go(users,
L.map(u => u.family),
L.flatten,
L.filter(u => u.age < 20),
L.map(u => u.name),
take(4),
log);
Last updated