์ ์ฉํ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋ ์กฐ๊ฐ๋ค์ ๋ชจ์ ๋์์ต๋๋ค.
- Henrik Larsen Toft's 20 JavaScript snippets that will make you a better developer
- Angelos Chalaris' 30 seconds of code
- modern javascript tutorial
ํจ์๋ ์ง์ ๋ ๊ฒฝ๋ก์ ๊ฐ์ ๋ฐํํ๊ณ , ๊ฐ์ด ์์ผ๋ฉด null์ ๋ฐํํฉ๋๋ค.
getValue({ a: { b: { c: "d" } } }, "a.b.c"); // = d
Function | Parameter | Description |
---|---|---|
getValue |
obj: object , path: string |
์ ํจํ ๊ฒฝ๋ก๋ผ๋ฉด ๊ฐ์ ๋ฆฌํดํ๊ณ ์๋๋ฉด null์ ๋ฆฌํดํฉ๋๋ค. |
๊ฐ์ด ์ง์ ๋ ๋ฒ์ ๋ด์ ์๋์ง ํ์ธํ๊ณ , ์ง์ ๋ ๋ฒ์์ ๊ฐ์ด ์๋ค๋ฉด ์ต์๊ฐ๊ณผ ์ต๋๊ฐ์ ๊ฐ์ฅ ๊ฐ๊น์ด ๊ฐ์ ๋ฐํ(ํด๋จํ)ํฉ๋๋ค.
clamp(0, 10, -5); // = 0
Function | Parameter | Description |
---|---|---|
clamp |
min: number , max: number , value:number |
์ฃผ์ด์ง ๊ฐ์ ๋ฆฌํดํ๊ฑฐ๋ ์ต์๊ฐ ํน์ ์ต๋๊ฐ์ ๋ฆฌํดํฉ๋๋ค. |
๋ค์ ์์ ์ ์ํํ๊ธฐ ์ ์ ์ง์ ๋ ๊ธฐ๊ฐ(๋ฐ๋ฆฌ์ด)์ ๊ธฐ๋ค๋ฆฝ๋๋ค.
await sleep(1000); // waits 1 sec
Function | Parameter | Description |
---|---|---|
sleep |
duration: number |
์ฃผ์ด์ง ๊ธฐ๊ฐ๋์ ๋๋ ์ด ๋ฉ๋๋ค. |
keying-function์ ๋ฐ๋ผ ๊ฐ์ฒด์ ๊ด๋ จ ํญ๋ชฉ์ ๊ทธ๋ฃนํํ๊ณ ์์ธํํฉ๋๋ค.
groupBy(
(vehicle) => vehicle.make,
[
{ make: "tesla", model: "3" },
{ make: "tesla", model: "y" },
{ make: "ford", model: "mach-e" },
]
);
// {
// tesla: [ { make: 'tesla', ... }, { make: 'tesla', ... } ],
// ford: [ { make: 'ford', ... } ],
Function | Parameter | Description |
---|---|---|
groupBy |
fn:Function list: Array |
๊ทธ๋ฃนํ๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. |
keying-function์ ๋ฐ๋ผ ๊ด๋ จ ํญ๋ชฉ์ ํฌํจํ๋ ํ์ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
collectBy(
(vehicle) => vehicle.make,
[
{ make: "tesla", model: "3" },
{ make: "tesla", model: "y" },
{ make: "ford", model: "mach-e" },
]
);
// [
// [ { make: 'tesla', ... }, { make: 'tesla', ... } ],
// [ { make: 'ford', ... } ],
// ]
Function | Parameter | Description |
---|---|---|
collectBy |
fn:Function list: Array |
groupBy์ ์์กด์ฑ์ด ์์ต๋๋ค. |
๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ๊ฐ์ ธ์ต๋๋ค. ์ด ํจ์๋ ๊นจ๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
head([1, 2, 3]); // = 1
head([]); // = undefined
Function | Parameter | Description |
---|---|---|
head |
list: Array |
์ฒซ๋ฒ์งธ ๊ฐ์ ๋ฆฌํดํ๊ฑฐ๋ undefiend๋ฅผ ๋ฆฌํดํฉ๋๋ค. |
๋ฆฌ์คํธ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ์ธํ ๋ชจ๋ ์์๋ฅผ โโ๊ฐ์ ธ์ต๋๋ค. ์ด ํจ์๋ ๊นจ๋ํ๊ณ ์ฝ๊ธฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ ์ฉํฉ๋๋ค.
tail([1, 2, 3]); // = [2, 3]
tail([]); // = []
Function | Parameter | Description |
---|---|---|
tail |
list: Array |
์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ ์ธํ ๋๋จธ์ง์ ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค. |
์ค์ฒฉ๋ ํ์ ๋ฆฌ์คํธ์์ ๋ชจ๋ ํญ๋ชฉ์ ์ฌ๊ท์ ์ผ๋ก ๊ฐ์ ธ์์ ํ๋ซ ๋ฆฌ์คํธ๋ฅผ ๋ง๋ญ๋๋ค.
flatten([[1, 2, [3, 4], 5, [6, [7, 8]]]]); // = [1, 2, 3, 4, 5, 6, 7, 8]
Function | Parameter | Description |
---|---|---|
flatten |
list: Array |
๋ค์ฐจ์ ๋ฐฐ์ด์ ์ ๋ ฅ๋ฐ์ 1์ฐจ์ ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค. |
keying-function์ ์ํด ์ ์๋ ๋๋ก ๋ ๋ชฉ๋ก์ ์กด์ฌํ๋ ๋ชจ๋ ๊ฐ์ ์ฐพ์ต๋๋ค. (๊ต์งํฉ)
intersectionBy((v) => v, [1, 2, 3], [2, 3, 4]); // = [2, 3]
intersectionBy(
(v) => v.a,
[{ a: 1 }, { a: 2 }],
[{ a: 2 }, { a: 3 }, { a: 4 }]
); // = [{ a: 2 }];
Function | Parameter | Description |
---|---|---|
intersectionBy |
fn: Function listA: Array listB: Array |
๊ต์งํฉ ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค. |
keying-function์ ์ํด ๊ฒฐ์ ๋ ๊ฐ
์ผ๋ก ๋ฆฌ์คํธ์ ๊ฐ ์์๋ฅผ ์ธ๋ฑ์ฑํฉ๋๋ค.
indexBy((val) => val.a, [{ a: 1 }, { a: 2 }, { a: 3 }]);
// = { 1: { a: 1 }, 2: { a:2 }, 3: { a: 3 } }
Function | Parameter | Description |
---|---|---|
indexBy |
fn: Function list: Array |
์ธ๋ฑ์ค๋ ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. |
์ฒซ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ ๋ฆฌ์คํธ์์ ๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์์ธ ๋ฆฌ์คํธ์ ์๋ ๋ชจ๋ ํญ๋ชฉ์ ์ฐพ์์ ์๋ก์ด ๋ฆฌ์คํธ๋ฅผ ๋ฐํํฉ๋๋ค.
keying-function์ ์ํด ๊ฒฐ์ ๋ฉ๋๋ค.
differenceBy((val) => val, [1, 2, 3], [3, 4, 5]); // = [1,2]
differenceBy(
(vehicle) => vehicle.make,
[{ make: "tesla" }, { make: "ford" }, { make: "gm" }],
[{ make: "tesla" }, { make: "bmw" }, { make: "audi" }]
); // = [{ make: 'ford' }, { make: 'gm' }]
Function | Parameter | Description |
---|---|---|
differenceBy |
fn: Function listA: Array listB: Array |
indexBy์ ์์กดํฉ๋๋ค. |
์ฃผ์ด์ง ํจ์์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ฉด ๊ธฐ๋ณธ๊ฐ์ ๋ฐํํฉ๋๋ค.
recoverWith("A", (val) => val, "B"); // = B
recoverWith("A", () => {
throw new Error();
}); // = 'A'
Function | Parameter | Description |
---|---|---|
recoverWith |
defaultValue: any fn: Function |
๋ ๋ฒ์งธ ๋งค๊ฐ๋ณ์ ์ดํ์ ๋งค๊ฐ๋ณ์๋ ์ฃผ์ด์ง ํจ์์ ๋งค๊ฐ๋ณ์์ ๋๋ค. |
๋ ์ p1๊ณผ p2 ์ฌ์ด์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค. (๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ)
distance([0, 1], [5, 4]); // = 5.8309518948453
Function | Parameter | Description |
---|---|---|
distance |
p1: Array<number> p2: Array<number> |
๋ ์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ ๊ณ์ฐ |
์ฒซ ๋ฒ์งธ ์์์์๋ถํฐ ์์ํ์ฌ ์กฐ๊ฑด ํจ์๊ฐ ์ถฉ์กฑ๋ ๋๊น์ง ๋ชฉ๋ก์์ ์์๋ฅผ ์ญ์ ํฉ๋๋ค.
dropWhile((val) => val < 5, [1, 2, 3, 4, 5, 6, 7]); // = [5,6,7]
Function | Parameter | Description |
---|---|---|
dropWhile |
pred: Function list: Array |
๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค. |
๊ฐ ์์์ ๊ฐ๋ณ ๊ฐ์ ๋ฐํํ๋ ํจ์๊ฐ ์ฃผ์ด์ง๋ฉด ๋ฆฌ์คํธ์ ์๋ ๋ชจ๋ ์์์ ํฉ์ ๊ณ์ฐํฉ๋๋ค.
sumBy(
(product) => product.price,
[
{ name: "pizza", price: 10 },
{ name: "pepsi", price: 5 },
{ name: "salad", price: 5 },
]
); // = 20
Function | Parameter | Description |
---|---|---|
sumBy |
fn: Function list: Array |
์ดํฉ(number )์ ๋ฆฌํดํฉ๋๋ค. |
ํ๊ฐ ํจ์๊ฐ ์ฃผ์ด์ง๋ฉด ์ค๋ฆ์ฐจ์์ผ๋ก ๋น๊ตํ๋ ํจ์๋ฅผ ๋ง๋ญ๋๋ค.
const byPrice = ascending((val) => val.price);
[{ price: 300 }, { price: 100 }, { price: 200 }].sort(byPrice);
// = [{ price: 100 }, { price: 200 }, { price: 300 }]
Function | Parameter | Description |
---|---|---|
ascending |
fn: Function |
ํ๊ฐํจ์๋ ๋น๊ตํ ์์ฑ์ ๋ฐํํฉ๋๋ค. |
ํ๊ฐ ํจ์๊ฐ ์ฃผ์ด์ง๋ฉด ๋ด๋ฆผ์ฐจ์์ผ๋ก ๋น๊ตํ๋ ํจ์๋ฅผ ๋ง๋ญ๋๋ค.
const byPrice = descending((val) => val.price);
[{ price: 300 }, { price: 100 }, { price: 200 }].sort(byPrice);
// = [{ price: 300 }, { price: 200 }, { price: 100 }]
Function | Parameter | Description |
---|---|---|
descending |
fn: Function |
ํ๊ฐํจ์๋ ๋น๊ตํ ์์ฑ์ ๋ฐํํฉ๋๋ค. |
์ธ๋ฑ์ค ๋ด์์ ์ฃผ์ด์ง ์กฐ๊ฑด์ ๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ํค๋ฅผ ๋ฐํํฉ๋๋ค.
findKey((car) => !car.available, {
tesla: { available: true },
ford: { available: false },
gm: { available: true },
}); // = "ford"
Function | Parameter | Description |
---|---|---|
findKey |
predicate: Function , index: Object |
๋ง์กฑํ๋ ์ฒซ ๋ฒ์งธ ํค ์ด๋ฆ์ ๋ฐํํฉ๋๋ค. |
์ฃผ์ด์ง ๋ฆฌ์คํธ์ ๊ฐ์ ๋ ๊ฐ์ ๋ฆฌ์คํธ์ผ๋ก ๋๋๋๋ค. ํ๋๋ ํ๊ฐ ํจ์๊ฐ ์ฐธ์ผ๋ก ํ๊ฐ๋๋ ๊ฐ์ ํฌํจํ๊ณ ๋ ๋ค๋ฅธ ๋ฆฌ์คํธ๋ ๊ฑฐ์ง์ธ ๊ฐ๋ค์ ํฌํจํฉ๋๋ค.
bifurcateBy((val) => val > 0, [-1, 2, -3, 4]);
// = [[2, 4], [-1, -3]]
Function | Parameter | Description |
---|---|---|
bifurcateBy |
predicate: Function , list: Array |
2์ฐจ์ ๋ฐฐ์ด์ ๋ฆฌํดํฉ๋๋ค. |
์ผ์ชฝ์์ ์ค๋ฅธ์ชฝ์ผ๋ก ํจ์ ํฉ์ฑ์ ์ํํฉ๋๋ค. ์ฒซ ํจ์์ ๊ฒฐ๊ณผ๋ ๋ ๋ฒ์งธ ํจ์์ ์ ๋ฌ๋๊ณ ๋ ๋ฒ์งธ ๊ฒฐ๊ณผ๋ ์ธ ๋ฒ์งธ ํจ์์ ์ ๋ฌ๋๋ ์์ผ๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ด ์ฒ๋ฆฌ๋ ๋๊น์ง ๊ณ์๋ฉ๋๋ค.
pipe([Math.abs, Math.floor, (val) => -val], 4.2); // = -4
pipe([(a, b) => a - b, Math.abs], 5, 10); // = 5
Function | Parameter | Description |
---|---|---|
pipe |
functions: Array<Function> , [args...] |
ํจ์ ํฉ์ฑ์ ์ํํฉ๋๋ค. |
์ฃผ์ด์ง JSON ๋ฌธ์์ด์ด ์ ํจํ์ง ํ๋จํฉ๋๋ค.
isValidJSON('{"name":"Adam","age":20}'); // true
isValidJSON('{"name":"Adam",age:"20"}'); // false
isValidJSON(null); // true
Function | Parameter | Description |
---|---|---|
isValidJSON |
str: string |
JSON ๋ฌธ์์ด์ด ์ ํจํ์ง ๊ฒ์ฌํฉ๋๋ค. |
์ฃผ์ด์ง ๋งค๊ฐ๋ณ์๊ฐ ์ ํจํ date
๊ฐ์ธ์ง ํ๋จํฉ๋๋ค.
isValidDate("December 17, 1995 03:24:00"); // true
isValidDate("1995-12-17T03:24:00"); // true
isValidDate("1995-12-17 T03:24:00"); // false
isValidDate("Duck"); // false
isValidDate(1995, 11, 17); // true
isValidDate(1995, 11, 17, "Duck"); // false
isValidDate({}); // false
Function | Parameter | Description |
---|---|---|
isValidDate |
[args..] | ์ฃผ์ด์ง ๋งค๊ฐ๋ณ์๊ฐ ์ ํจํ date์ธ์ง ํ์ธํฉ๋๋ค. |
memoization ํ ํฌ๋์ ์ด์ฉํด์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ฅํฉ๋๋ค.
const fibonacci = (n) => (n <= 1 ? 1 : fibonacci(n - 1) + fibonacci(n - 2));
const memoizedFibonacci = memoize(fibonacci);
for (let i = 0; i < 100; i++) fibonacci(30); // ~5000ms
for (let i = 0; i < 100; i++) memoizedFibonacci(30); // ~50ms
Function | Parameter | Description |
---|---|---|
memoize |
fn: Function |
์ฃผ์ด์ง ํจ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด๋ก๋๋ค. |
๋ค์ค ์ธ์๋ฅผ ๊ฐ์ง ํจ์๋ฅผ ์ปค๋ง๋ ํจ์๋ก ๋ณํํฉ๋๋ค.
let curriedSum = curry(sum);
curriedSum(1, 2, 3); // 6
curriedSum(1)(2, 3); // 6
curriedSum(1)(2)(3); // 6
Function | Parameter | Description |
---|---|---|
curry |
fn: Function |
์ฃผ์ด์ง ํจ์๋ฅผ ์ปค๋งํฉ๋๋ค. |