자바스크립트를 사용하여 객체를 사용하려고 합니다. 이때 객체가 가진 모든 프로퍼티들의 키와 값을 확인하여 값이 있는 경우의 키들만 남기고 싶다면 어떻게 할까요?



# 객체에서 모든 키의 값이 있는 경우만 가져오기
쉽게 말해 객체의 프로퍼티에서 값이 없는 경우를 다 제외하고 있는 값만 가져오는 방법을 의미합니다. 이해하기 쉽게 예를 들어보자면 아래에는 객체 option이 존재합니다.
option = {
  siteName: '웹이즈프리',
  url: 'webisfree.com',
  no: 1,
  popular: null,
  etc: '',
  tag: [] 
}

option은 siteName, url 등등 6개의 값을 가지고 있습니다. 하지만 이들 중 값이 없는 프로퍼티를 사용할 필요가 없다면? 없는 프로퍼티를 제외하고 키의 값이 있는 값만 가진 객체를 만들 수 있을까요? 아래처럼 말이죠.
option = {
  siteName: '웹이즈프리',
  url: 'webisfree.com',
  no: 1
}

빈 값 등의 null, undefined, 0, '' 이나 배열이더라도 값이 없다면 모두 제외한 배열 값을 다시 얻기 위한 방법을 알아내고자 합니다.


! lodash를 사용하는 방법
가장 간단하고 편한 방법은 바로 lodash 라이브러리를 사용하는 방법입니다. 이 때 사용해야 할 메소드는 아래의 두 가지 입니다.

_.pickBy()
_.isEmpty()


여기서 _.pickBy()는 객체의 value와 key를 각각 확인하기 위해서 사용하고 다음으로 _.isEmpty()는 값이 비었는지... 즉 Falsy인 값을 확인하기 위해서 사용합니다. 이때 우리는 비어있는 않는 값을 찾아야하므로 그 반대값을 구하기 위해 느낌표 !를 사용한 비교문을 만들었습니다. 아래의 코드를 봐주세요.
let option = {
  siteName: '웹이즈프리',
  url: 'webisfree.com',
  no: 1,
  popular: null,
  etc: '',
  tag: []
};

option = _.pickBy(option , (value, key) => { return !_.isEmpty(value) })

이제 위 코드를 실행하면 아래와 같은 값을 가지게 됩니다.
// 출력결과
{
  siteName: "웹이즈프리",
  url: "webisfree.com"
}

예상대로 빈 값은 모두 제거되고 값이 있는 프로퍼티만 가지는 객체만 반환하게 됩니다.