Library/Lodash

๐Ÿ“š Lodash ๊ฐ์ฒด ๋ž˜ํ•‘ & ์ฒด์ด๋‹ ๋ฐฉ๋ฒ•

์ธํŒŒ_ 2021. 11. 25. 10:12

lodash-chaining

๋กœ๋Œ€์‰ฌ ๊ฐ์ฒด ๋ž˜ํ•‘

 

_(๊ฐ’)

  • ๊ด„ํ˜ธ์•ˆ์˜ ๊ฐ’์„ lodash๋กœ ๋ž˜ํ•‘๋œ ๊ฐ์ฒด๋กœ ์‹ผ๋‹ค.
let rap_val = _({ "f":3, "g":15 })โ€‹
์ œ์ด์ฟผ๋ฆฌ ์›๋ฆฌ๋ž‘ ๋น„์Šทํ•˜๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
<li>ํƒœ๊ทธ๋ฅผ ์ œ์ด์ฟผ๋ฆฌ๋กœ ๊ฐ์‹ผ๋‹ค๊ณ  ํ• ๋•Œ, $('li') ์ด๋Ÿฐ์‹์œผ๋กœ ํ•œ๋‹ค.
์ด ๋ฌธ๋ฒ•์˜ ์˜๋ฏธ๋Š” HTMLCOLLECTION ๋ฐฐ์—ด์˜ li๋ฅผ ์ œ์ด์ฟผ๋ฆฌ์šฉ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•œ๋‹ค๋Š” ์˜๋ฏธ.

Lodash๋„ ๋˜‘๊ฐ™์ด ์ ‘๊ทผ ํ•˜๋ฉด ๋œ๋‹ค.
๊ทธ์ € $ ๋Œ€์‹  _ ๋ฅผ ์“ฐ๋Š” ์ฐจ์ด์ ๋ฐ–์— ์—†๋‹ค.

โ€‹

_.prototype.value()

  • lodash๋กœ ๋ž˜ํ•‘๋œ ๊ฐ’๋“ค์„ ํ‘ผ๋‹ค.
  • ๋ณดํ†ต ์ฒด์ด๋‹ ํ•œ ํ›„์— ๊ฐ’์„ ์–ป์„๋•Œ ์‚ฌ์šฉ
// Defining values
let values = { "f":3, "g":15 };
  
// _()๋กœ ๋ฌถ์œผ๋ฉด Lodash ์ „์šฉ์œผ๋กœ ๋ž˜ํ•‘๋œ๋‹ค.
let rap_val = _(values)

// ๋ž˜ํ•‘๋œ ๊ฐ์ฒด๋ฅผ ๋‹ค์‹œ ํ‘ผ๋‹ค.
let unwrap_val = rap_val.value();
  
console.log(unwrap_val); // { f: 3, g: 15 }โ€‹

๋กœ๋Œ€์‰ฌ ํ•จ์ˆ˜ ์ฒด์ด๋‹

 

_.chain()

  • Lodash๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋Š” ๋‹ค์–‘ํ•œ ํ•จ์ˆ˜์˜ ํ™•์žฅ์„ฑ ๋•Œ๋ฌธ๋„ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์“ด๋‹ค.
  • ์ œ์ด์ฟผ๋ฆฌ์ฒ˜๋Ÿผ, ๊ฐ ๋กœ๋‹ค์‰ฌ ํ•จ์ˆ˜๋“ค์„ ์ฒด์ด๋‹ ํ•˜๋Š”๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ค€๋‹ค.
var users = [
  { 'user': 'barney',  'age': 36 },
  { 'user': 'fred',    'age': 40 },
  { 'user': 'pebbles', 'age': 1 }
];
 

var youngest = _
  .chain(users) // users๋ฐฐ์—ด๋กœ ์ฒด์ด๋‹ ์‹œ์ž‘
  .sortBy('age') // age์˜ ๊ฐ’๋“ค์„ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  .map(function(o) {
    return o.user + ' is ' + o.age; // ๋ฌธ์ž์—ด ์ด์–ด๋ถ™์—ฌ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
  })
  .head() // ์ฒซ๋ฒˆ์งธ ์š”์†Œ ์„ ํƒ
  .value(); // ๊ฐ’

// => 'pebbles is 1'โ€‹


์ค‘์ฒฉ๋œ ๊ฐ์ฒด์˜ value๋ฅผ ๋ฝ‘์•„ ์“ฐ๊ธฐ

const data = [
   {
      tag: {
         name: 'tag1',
         media: {
            nodes: [
               {
                  id: 'uid1',
                  user: 'gracefullight',
                  caption: 'caption1',
                  likes: 10,
               },
               {
                  id: 'uid2',
                  user: 'gracefullight',
                  caption: 'caption2',
                  likes: 20,
               },
            ],
         },
      },
   },
   {
      tag: {
         name: 'tag2',
         media: {
            nodes: [
               {
                  id: 'uid3',
                  user: 'gracefullight',
                  caption: 'caption3',
                  likes: 30,
               },
               {
                  id: 'uid4',
                  user: 'gracefullight',
                  caption: 'caption4',
                  likes: 40,
               },
            ],
         },
      },
   },
];

/* ์ € ์ค‘์ฒฉ๊ฐ์ฒด์—์„œ ๋”ฐ๋กœ nodes ํ‚ค๊ฐ’์˜ ๊ฐ์ฒด๋“ค๋งŒ ๋”ฐ๋กœ ๋นผ์„œ ๋ฐฐ์—ด๋กœ ๋งŒ๋“œ๋Š” ์ฒด์ด๋‹ */
result = _
	.chain(data)
    .map('tag.media.nodes') // ํ‚ค๊ฐ€ tag.media.nodes์ธ ๊ฐ’๋“ค๋งŒ ํƒ์ƒ‰ํ•˜์—ฌ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜
    .flatten() // tag.media.nodes์˜ value๊ฐ’์€ ๋ฐฐ์—ด์ด๊ธฐ์—, ๊ณ ์ฐจ์› ๋ฐฐ์—ด์„ ํ•œ ์ฐจ์› ๋Œ์–ด์˜ฌ๋ ค ๋ฐ˜ํ™˜. 2์ฐจ์› -> 1์ฐจ์›
    .value(); // ๋กœ๋‹ค์‰ฌ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋‹๋ผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜

์ฒด์ด๋‹


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

https://www.geeksforgeeks.org/lodash-introduction/?ref=gcse

https://lodash.com/docs/4.17.15

https://runebook.dev/ko/docs/lodash/-index-