lodash 사용 예제

1 minute read

Lodash 사용 예제를 정리해보았다. 왜냐면 내가 자꾸 잊어먹기 때문… 계속 업데이트 할 예정이다.

array multi group by

BUILDINGBUILDING_NAME, 2개 컬럼을 기준으로 GROUP BY를 만든다. 이 2개 컬럼은 CODE, VALUE로서 1:1 관계다.

// 변경 
[
  {BUILDING: "01", BUILDING_NAME: "1호관", ROOM_NO: "1-001B", ROOM: "1-001B"}
  ,{BUILDING: "01", BUILDING_NAME: "1호관", ROOM_NO: "1-002", ROOM: "1-002"}
  ,{BUILDING: "01", BUILDING_NAME: "1호관", ROOM_NO: "1-011A", ROOM: "1-011A"}
  ,{BUILDING: "01", BUILDING_NAME: "1호관", ROOM_NO: "1-011B", ROOM: "1-011B"}  
  // ...
]

// GROUP BY...

// 변경 
[
  BUILDING: "01"
  BUILDING_NAME: "1호관"
  ROOM: [
    {ROOM_NO: "1-001B", ROOM: "1-001B"}
    ,{ROOM_NO: "1-002", ROOM: "1-002"}
    ,{ROOM_NO: "1-011A", ROOM: "1-011A"}
    ,{ROOM_NO: "1-011B", ROOM: "1-011B"}    
    // ...
  ]
]

핵심은 groupBymap, 그리고 groupBychain으로 쓰는 것이다.

json = _.chain(json)
        .groupBy("BUILDING_NAME") // BUILDING_NAME으로 group by를 하고
        .map(function(v, i) { // groupBy를 하면 object가 return되니, map을 써서 array로 다시 바꿔주자
          return {
            BUILDING: _.get(_.find(v, 'BUILDING'), 'BUILDING'), // BUILDING은 _.find로 하나만 골라내고
            BUILDING_NAME: i, // BUILDING_NAME이 기준자라 index다
            ROOM: _.chain(v) // ROOM과 ROOM_NO도 1:1 관계니까 groupBy를 또 해주면 된다
                  .groupBy("ROOM_NO")
                  .map((v, i) => {
                    return {
                      ROOM_NO: i,
                      ROOM: _.get(_.find(v, 'ROOM'), 'ROOM')
                    }
                  }).value()
          }
        })
        .orderBy(['BUILDING'])
        .value();

Array 안의 Object를 순회하며 특정 Property의 값을 unique 한 Array로 만들기

  1. Array 안의 모든 Object를 순회하며 ROOM_NO property의 value를 뽑아 Array로 만든 후
  2. Array 안의 값은 unique하게 재편한다
// 변경 
[{
  "id": 0,
  "ROOM_NO": "5E405"
}, {
  "id": 3,
  "ROOM_NO": "5S535"
}, {
  "id": 4,
  "ROOM_NO": "5S535"
}, {
  "id": 6,
  "ROOM_NO": "6-101"
}]

/// 변경 
["5E405", "5S535", "6-101"]

핵심은 map 함수로 모든 Object를 조회하며 특정 Propert의 값만 뽑고, uniq 함수를 쓰는 것이다.

let result = _.chain(this.selected)
              .map((o) => o.ROOM_NO)
              .uniq()
              .value()

Array 안의 Object를 순회하며 Property 추가하기

  1. Array 안의 모든 Object를 순회하며 Property 2개를 추가한다.
  2. 추가할 Property는
    • HOPE1: `HOPE1_DATE + HOPE1_TIME’
    • HOPE2: `HOPE2_DATE + HOPE2_TIME’
// 변경전
[{
  "HOPE1_DATE": "월요일",
  "HOPE1_TIME": "13시-14시",
  "HOPE2_DATE": "월요일",
  "HOPE2_TIME": "14시-15시"
}, {
  "HOPE1_DATE": "월요일",
  "HOPE1_TIME": "13시-14시",
  "HOPE2_DATE": "월요일",
  "HOPE2_TIME": "14시-15시"
}]

// 변경 후
[{
  "HOPE1_DATE": "월요일",
  "HOPE1_TIME": "13시-14시",
  "HOPE2_DATE": "월요일",
  "HOPE2_TIME": "14시-15시",
  "HOPE1": "월요일 13시-14시",
  "HOPE2": "월요일 14시-15시"
}, {
  "HOPE1_DATE": "월요일",
  "HOPE1_TIME": "13시-14시",
  "HOPE2_DATE": "월요일",
  "HOPE2_TIME": "14시-15시",
  "HOPE1": "월요일 13시-14시",
  "HOPE2": "월요일 14시-15시"
}]

핵심은 assignIn이다.

_.map(list, o => {
    return _.assignIn(
      o,
      { HOPE1: `${o.HOPE1_DATE} ${o.HOPE1_TIME}` },
      { HOPE2: `${o.HOPE2_DATE} ${o.HOPE2_TIME}` }
    )
  })

Leave a Comment