Library/Lodash

๐Ÿ“š Lodash ์†Œ๊ฐœ & ES6 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋น„๊ต

์ธํŒŒ_ 2021. 11. 24. 16:35

lodash-es6-install

Lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

Lodash(๋กœ๋Œ€์‰ฌ)๋Š” JavaScript์˜ ์ธ๊ธฐ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๋กœ ์ œ์ด์ฟผ๋ฆฌ, ๋ฆฌ์•กํŠธ์™€ ๊ฐ™์ด ์ „์„ธ๊ณ„์ ์œผ๋กœ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.

Jquery๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ DOM์„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ–ˆ๋“ฏ์ด, Lodash๋Š” ์ฃผ๋กœ array, collection, date ๊ฐ™์€ ๋ฐ์ดํ„ฐ์˜ ๊ตฌ์กฐ๋ฅผ ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•จ์ˆ˜ํ˜•์œผ๋กœ ๋‹ค๋ฃฐ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํƒ„์ƒํ–ˆ๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐฐ์—ด ์•ˆ์˜ ๊ฐ์ฒด๋“ค์˜ ๊ฐ’์„ ํ•ธ๋“ค๋ง ํ• ๋•Œ (๋ฐฐ์—ด, ๊ฐ์ฒด ๋ฐ ๋ฌธ์ž์—ด ๋ฐ˜๋ณต / ๋ณตํ•ฉ์ ์ธ ํ•จ์ˆ˜ ์ƒ์„ฑ) ์ฝ”๋“œ ๋ช‡์ค„๋งŒ์œผ๋กœ ์œ ๊ธฐ์ ์œผ๋กœ ๋‹ค๋ฃฐ์ˆ˜๊ฐ€ ์žˆ์–ด์„œ ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค.

ํŠนํžˆ Frontend ํ™˜๊ฒฝ์—์„œ ์„œ๋ฒ„(DB)์—์„œ ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๊ณ  ๋ณถ์•„๋„ฃ์„๋•Œ ๋งŽ์ด ์“ฐ์ด๋Š” ํŽธ์ด๋‹ค.

 

Lodash ๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๋ณด๋ฉด ์•Œ๋“ฏ์ด, ๋กœ๋Œ€์‰ฌ๋Š” ๋ฐ‘์ค„ _ ๊ธฐํ˜ธ๋ฅผ ์ฒ˜์Œ์— ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉ๋œ๋‹ค.

__. (๋ณ€์ˆ˜) ์ด๋Ÿฐ์‹์œผ๋กœ ์ž‘์„ฑํ•  ๊ฒฝ์šฐ lodash wrapper๋กœ ๋ณ€์ˆ˜๋ฅผ ๊ฐ์‹ธ๊ฒŒ ๋˜๋ฉด์„œ ํ•ด๋‹น ๋ณ€์ˆ˜์— ๋Œ€ํ•œ chaining์„ ์‹œ์ž‘ํ•œ๋‹ค.

์ œ์ด์ฟผ๋ฆฌ๋ฅผ ์ด์šฉํ• ๋•Œ $( ) ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ๋กœ DOM์„ ๋ฌถ์–ด ์‚ฌ์šฉํ•˜๋“ฏ์ด ๋กœ๋Œ€์‰ฌ๋„ ๋‹ฌ๋Ÿฌ ๊ธฐํ˜ธ ๋Œ€์‹  ๋ฐ‘์ค„ ๊ธฐํ˜ธ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ผ๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค.
// $() ๋กœ ๋ฌถ์œผ๋ฉด jquery ์ „์šฉ ๋ณ€์ˆ˜๋กœ ๋ž˜ํ•‘๋˜๋“ฏ์ด
let dom = 'div span'
let $dom = $(dom);

// _()๋กœ ๋ฌถ์œผ๋ฉด Lodash ์ „์šฉ์œผ๋กœ ๋ž˜ํ•‘๋œ๋‹ค.
let values = { "f":3, "g":15 };
let rap_val = _(values);

๊ทธ ์™ธ์— lodash.js ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋“ค์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ์„ฑ๋Šฅ์ด ๋ณด์žฅ๋˜์–ด์žˆ๋Š” ๋‹ค์–‘ํ•œ ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Œ.
  • ํผํฌ๋จผ์Šค ์ธก๋ฉด์—์„œ native๋ณด๋‹ค ๋” ๋‚˜์€ ์„ฑ๋Šฅ์„ ๊ฐ€์ง.
  • npm์ด๋‚˜ ๊ธฐํƒ€ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ.

Lodash ์„ค์น˜ & ์‚ฌ์šฉ

 

Lodash

_.defaults({ 'a': 1 }, { 'a': 3, 'b': 2 });_.partition([1, 2, 3, 4], n => n % 2);DownloadLodash is released under the MIT license & supports modern environments. Review the build differences & pick one that’s right for you.InstallationIn

lodash.com

โ€‹

CDN ์ฝ”๋“œ (ํด๋ผ์ด์–ธํŠธ)

<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js"></script>โ€‹

 

npm ์„ค์น˜ (์„œ๋ฒ„)

# npm ์„ค์น˜
npm i -g npm
npm i --save lodash

 

lodash ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

// ES6
import _ from 'lodash';

// commonJs
var _ = require('lodash');

var myFriend=[
    {name:'kys',job:'developer',age:27},
    {name:'cys',job:'webtoons man',age:27},
    {name:'yhs',job:'florist',age:26},
    {name:'chj',job:'nonghyup man',age:27},
    {name:'ghh',job:'coffee man',age:27},
    {name:'ldh',job:'kangaroo',age:27},
]

// ์ฝœ๋ฐฑํ•จ์ˆ˜๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ฐธ์ด๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
_.find(myFriend, function(friend) {
	return friend.age < 28;
}); // → { name: 'kys',job:'developer' ,'age': 27}

Lodash vs ES6 ๋น„๊ต

lodash-es6-install

์•ž์„œ ๋งํ–ˆ๋“ฏ์ด, Lodash๋Š” ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ฐฐ์—ด์ด๋‚˜ ๊ฐ์ฒด๋ฅผ ์ข€๋” ๊ฐ„ํŽธํ•˜๋ฉด์„œ ์œ ๊ธฐ์ ์œผ๋กœ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ ํ–ˆ๋‹ค.

๊ทธ๋Ÿผ lodash์™€ es6์˜ ํ•จ์ˆ˜ ์†๋„๋Š” ์–ด๋А์ •๋„ ์ฐจ์ด๊ฐ€ ๋‚ ๊นŒ?

๋‹ค์Œ์€ ๊ฐ™์€ ๊ธฐ๋Šฅ์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ•จ์ˆ˜์™€ ๊ธฐ์กด ๋„ค์ดํ‹ฐ๋ธŒ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ–ˆ์„๋•Œ ๋‘˜์˜ ์„ฑ๋Šฅ ๋น„๊ต๋ฅผ ํ•œ ๊ทธ๋ž˜ํ”„์ด๋‹ค.

์„ฑ๋Šฅ ๋น„๊ต๋Š” ์•„๋ž˜ ๋งํฌ์—์„œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

Benchmark: native find vs lodash _.find - MeasureThat.net

 

measurethat.net


find() ์„ฑ๋Šฅ ๋น„๊ต

  • find()๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ปฌ๋ ‰์…˜์—์„œ์˜ ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์ฐพ๋Š” ๋ฉ”์†Œ๋“œ
var array = [
  { name: 'lim', age: 26 },
  { name: 'kim', age: 28 },
  { name: 'choi', age: 32 },
  { name: 'park', age: 21 },
]

/* Lodash */
_.find(array, arr => arr.age < 28)

/* ES6 */
array.find(arr => arr.age < 28)

lodash-es6

โ€‹๋„ค์ดํ‹ฐ๋ธŒ find() ๊ฐ€ ์••๋„์ ์œผ๋กœ ๋ฒค์น˜๋งˆํฌ ์ ์ˆ˜๊ฐ€ ๋†’๋‹ค. (์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค)

โ€‹

forEach() ์„ฑ๋Šฅ ๋น„๊ต

  • forEach()๋Š” ๋ฐฐ์—ด ์ „์ฒด๋ฅผ ๋Œ๋ฉฐ ํ•ด๋‹น ๋ฐฐ์—ด์˜ ์š”์†Œ์— ์ง์ ‘์ ์ธ ์ž‘์—…์„ ํ•˜๋Š” ๋ฉ”์†Œ๋“œ
var array = [
  { name: 'lim', age: 26 },
  { name: 'kim', age: 28 },
  { name: 'choi', age: 32 },
  { name: 'park', age: 21 },
]

/* Lodash */
_.forEach(array, (arr, index, self) => {
  // ...
})

_.each(array, (arr, index, self) => {
  // ...
})

/* ES6 */
array.forEach((arr, index, self) => {
  // ...
})

lodash-es6

โ€‹Lodash์˜ each๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ์ŠคํŽ™์— ๋”ฐ๋ผ ๊ตฌํ˜„์„ ๋‹ค๋ฅด๊ฒŒ ๊ฐ€์ ธ๊ฐ€๊ธฐ ๋•Œ๋ฌธ์— ๋ฒค์น˜๋งˆํฌ ์ ์ˆ˜๊ฐ€ ๋†’๋‹ค (๋น ๋ฅด๋‹ค)

 

filter() ์„ฑ๋Šฅ ๋น„๊ต

  • filter()๋Š” ์ฝœ๋ ‰์…˜์—์„œ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๋ชจ๋“  ์š”์†Œ๋ฅผ ์ถ”์ถœํ•ด ์ค€๋‹ค.
const numbers = [10, 40, 230, 15, 18, 51, 1221]       

/* Lodash */
_.filter(numbers, num => num % 3 === 0)

/* ES6 */
numbers.filter(num => num % 3 === 0)

lodash-es6

 

includes() ์„ฑ๋Šฅ ๋น„๊ต

  • includes() ๋Š” ์ฝœ๋ ‰์…˜์— ํ•ด๋‹น ์š”์†Œ๋ฅผ ๊ฐ–๊ณ  ์žˆ๋Š”์ง€๋ฅผ ํ™•์ธํ•œ๋‹ค.
const primes = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,97]

/* Lodash */
_.includes(primes, 47) // true

/* ES6 */
primes.includes(79) // true

lodash-es6


Lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ ์ด์œ 

์ง€๊ธˆ๊นŒ์ง€ ๋ฐ”๋‹๋ผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋กœ๋Œ€์‰ฌ์˜ ์„ฑ๋Šฅ ์ฐจ์ด๋ฅผ ๋ณด๋ฉด, ๋Œ€๋ถ€๋ถ„์˜ ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜ native ES6 ๋ฌธ๋ฒ•์ด lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ๋ฒ•๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋น ๋ฅด๋‹ค๋Š”๊ฑธ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋Ÿผ ์˜๋ฌธ์ด ๋“ค๊ฒƒ์ด๋‹ค.

๋‹น์—ฐํžˆ native๋ฌธ๋ฒ•์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฌธ๋ฒ•๋ณด๋‹ค ๋น ๋ฅด๊ณ , ๊ธฐ๋ณธ ์ง€์›ํ•˜๋Š”๋ฐ ์™œ ๊ตณ์ด ๋ฌด๊ฑฐ์šด lodash๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์จ์•ผ ํ•˜๋‚˜?

 

์ •๋‹ต์€ ๋ฐ”๋กœ ํ•จ์ˆ˜์˜ ํ™•์žฅ์„ฑ ๋•Œ๋ฌธ์ด๋‹ค.

โ€‹

findIndex() ํ•จ์ˆ˜ (๋ฆฌํ„ด๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š” ํ•ด๋‹น ์š”์†Œ์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜)๋ฅผ ์˜ˆ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•ด๋ณด๊ฒ ๋‹ค.

var myFriend = [
 {name:'kys',job:'developer',age:27},
 {name:'cys',job:'webtoons man',age:27},
 {name:'yhs',job:'florist',age:26},
 {name:'chj',job:'nonghyup man',age:27},
];

myFriend.findIndex(function(friend){
   return friend.age === 26 // 2
});

_.findIndex(myFriend, function(friend) {
  return friend.age === 26; // 2
});

๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ES6์˜ findIndex()๋Š” ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฐ–์— ๋ชป์˜ค์ง€๋งŒ, Lodash์˜ findIndex()๋Š” ๊ฐ์ฒด๊ฐ’๋„ ์ค„์ˆ˜ ์žˆ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค.

// ์ฒ˜์Œ ์ผ์น˜ํ•˜๋Š” object์˜ index ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
_.findIndex(myFriend, { name: 'cys', job:'webtoons man',age: 27 });
// -> 1

// ๋‚˜์ด๊ฐ€ 26์ธ ๊ฐ์ฒด๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ๋‚˜์˜ค๋Š” index ๋ฐ˜ํ™˜
_.findIndex(myFriend, {age: 26});
// → 2

โ€‹

map() ํ•จ์ˆ˜๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ES6์—์„œ๋Š” ํ”ํžˆ ๋ฐฐ์—ด ๊ณ ์ฐจํ•จ์ˆ˜๋ผ๊ณ  ๊ฐ€๋ฅด์น˜์ง€๋งŒ, lodash์˜ map()ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ฐ์ฒด ์ž์ฒด๋ฅผ ์ค„์ˆ˜ ์žˆ๋‹ค.

const data = {
  a: 20,
  b: 30,
  c: 10,
}

// ์›๋ž˜๋ผ๋ฉด map๋ฉ”์†Œ๋“œ๋Š” ๋ฐฐ์—ด์—์„œ ๋ชป์“ฐ์ง€๋งŒ, _.map์€ ๊ฐ์ฒด ์žํŽ˜๋ฅผ mapํ•  ์ˆ˜ ์žˆ์Œ
// ๊ฐ์ฒด๋ฅผ ๋ฐ›์•„ ์—…๊ทธ๋ ˆ์ด๋“œ๋œ ๊ฐ์ฒด๋ฅผ ๋ฆฌํ„ด
_.map(data, (count, type) => ({
  type: type,
  count: count,
}))
/* ๊ฒฐ๊ณผ๊ฐ’
[
  {
    type: 'a',
    count: 20
  },
  {
    type: 'b',
    count: 30
  },
  {
    type: 'c',
    count: 10
  }
]
*/

๋˜ํ•œ, ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์ค‘ ์ค‘๋ณต๊ฐ’์„ ์ œ๊ฑฐํ•œ ๊ฐ’์„ ๊ตฌํ• ๋•Œ๋„ lodash๋ฅผ ์ด์šฉํ•˜๋ฉด ๊ฐ„ํŽธํ•˜๊ฒŒ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ๊ตฌํ˜„ํ• ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋ฒค์น˜๋งˆํฌ ์ ์ˆ˜๋ฅผ ๋ณด๋ฉด ์•Œ์ˆ˜์žˆ๋“ฏ์ด ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์ˆœ์ˆ˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ์ข‹๋‹ค.

var elements = [1,2,3,1,2,4,2,3,5,3]

/* Lodash */
// ์ง€์› ํ•จ์ˆ˜๋ฅผ ํ•œ๋ฐฉ์—!!
_.uniq(elements) //  [1,2,3,4,5]

/* ES6 */
// Set์ž๋ฃŒ ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•œ ๋’ค sperad ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์‹œ ๋ฐฐ์—ด๋กœ ๋Œ๋ ค ๋†“๋Š” ๋ณต์žกํ•œ ๋กœ์ง์„ ์‚ฌ์šฉํ•œ๋‹ค.
[...new Set(elements)] //  [1,2,3,4,5]

lodash-es6


๋งˆ์ง€๋ง‰์œผ๋กœ ์ง€์—ฐํ‰๊ฐ€ ์›๋ฆฌ์— ์˜ํ•ด์„œ, Lodash๋Š” ์˜คํžˆ๋ ค ES6๋ณด๋‹ค ์„ฑ๋Šฅ์ด ์ข‹์„์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ๋ก€๋„ ์กด์žฌํ•œ๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ ํฌ์ŠคํŒ…์„ ์ฐธ๊ณ ํ•˜๊ธธ ๋ฐ”๋ž€๋‹ค.

 

[LODASH] ๐Ÿ“š ์ง€์—ฐ ํ‰๊ฐ€ ์›๋ฆฌ (lodash๋Š” ์˜คํžˆ๋ ค ์„ฑ๋Šฅ์ด ์ข‹์„ ์ˆ˜ ์žˆ๋‹ค)

์ง€์—ฐ ํ‰๊ฐ€๋ž€? ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ๋А๊ธ‹ํ•œ ๊ณ„์‚ฐ๋ฒ•(Lazy evaluation)์€ ๊ณ„์‚ฐ์˜ ๊ฒฐ๊ณผ ๊ฐ’์ด ํ•„์š”ํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋Šฆ์ถ”๋Š” ๊ธฐ๋ฒ•์ด๋‹ค. ์ง€์—ฐ ํ‰๊ฐ€๋Š” ํ•„์š” ํ•  ๋•Œ๊นŒ์ง€ ๊ณ„์‚ฐ์„ ๋Šฆ์ถ”๋ฉด์„œ ๋ถˆํ•„์š”ํ•œ ๊ณ„์‚ฐ์„ ์ค„

inpa.tistory.com

 

โ€‹์ด ์ฒ˜๋Ÿผ Lodash ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ œ๊ณต๋˜๋Š” ํ•จ์ˆ˜๋Š” ํ•œ๊ฐ€์ง€ ๊ธฐ๋Šฅ๋งŒ ์žˆ๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๋‚ดํฌํ•˜๊ณ  ์žˆ๋‹ค.

๋์œผ๋กœ Lodash ์™€ ES6 ์ฐจ์ด๋ฅผ ํ‘œ๋กœ ๊ฐ„ํ•œํžˆ ์ •๋ฆฌํ•˜๊ณ  ๋งˆ์น˜๊ฒ ๋‹ค.

  ์žฅ์  ๋‹จ์ 
Lodash ๋ฉ”์†Œ๋“œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์œผ๋กœ ์ƒ์‚ฐ์„ฑ์ด ๋†’๋‹ค. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌด๊ฒ๋‹ค. 
ES6์— ๋น„ํ•˜์—ฌ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค.
ES6 ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. 
๋‹น์—ฐํžˆ ๊ธฐ๋ณธ ๋ฌธ๋ฒ•์ด๋ผ ํ˜ธํ™˜์„ฑ์ด ์ข‹๋‹ค.
์˜ˆ์™ธ ์ฒ˜๋ฆฌ๋ฅผ ์ž˜ ํ•ด์•ผํ•œ๋‹ค. 
์™œ๋ƒํ•˜๋ฉด Array ํƒ€์ž…๋ฐ–์— ์ง€์›์„ ์•ˆํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. 
๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์—๋Š” ์ง์ ‘ ๋ฉ”์†Œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋ฏ€๋กœ ๋ฒˆ๊ฑฐ๋กญ๋‹ค.

# ์ฐธ๊ณ ์ž๋ฃŒ

https://ui.toast.com/weekly-pick/ko_20190515