lodash의 _.find()를 사용하면 원하는 객체의 값만 쉽게 찾을 수 있습니다. 그런데 AND 또는 OR 조건으로 값을 찾고 싶다면 어떻게 할 수 있을까요? 아래에서 알아보세요.



# lodash에서 AND / OR 조건으로 find() 찾는 방법
만약 AND 또는 OR 조건으로 찾을 경우 두 가지 방법이 존재합니다. 먼저 find()에 콜백함수를 적용하는 방법이 있으며  .filter()를 사용하는 방법도 존재합니다.


! 콜백함수를 적용하기
콜백함수에 조건식을 사용하여 원하는 값만 리턴하려고 합니다. 만약 site라는 변수에서 다음과 같은 값을 찾으려고 합니다.
var sites = [
  { no: 1, name: 'web', type: 'a' },
  { no: 2, name: 'is', type: 'b' },
  { no: 3, name: 'free', type: 'c' }
];

이제 no가 2이면서 name이 'is'인 값을 찾으려면 아래와 같이 실행합니다.
_.find(sites, function(site) {
  return site.no === 2 && site.name === 'is'
});
 
위 코드를 실행하면? 아래와 같이 원하는 객체만 반환됩니다.
{no: 2, name: "is", type: "b"}

매우 간단합니다. 그럼 다음은 filter()를 사용하는 방법입니다.


! filter()를 사용하는 방법 알아보기
filter()는 필터링하여 원하는 값을 반환하게 하는데 find()와 매우 비슷하게 사용할 수 있습니다. 아래를 봐주세요.
_.filter(sites, function(site) {
  return site.no === 2 && site.name === 'is';
});

위 코드를 실행하면 동일하게 두 가지 값과 일치하는 객체를 반환합니다.
{no: 2, name: "is", type: "b"}

위의 예제는 AND 조건인 경우입니다. 만약 OR 조건이라면 &&를 ||로 바꾸어 사용할 수 있겠죠.


! OR 조건으로 찾아보기
이번에는 no가 3이거나 name이 web인 값을 찾아봅니다. OR 조건이죠.
_.filter(sites, function(site) {
  return site.no === 3 || site.name === 'web';
});

결과를 보면 아래와 같이 일치하는 두 개의 객체를 반환하게됩니다. 
{no: 1, name: "web", type: "a"}
{no: 3, name: "free", type: "c"}



# 마치면서
여기까지 AND / OR 조건으로 lodash에서 값을 찾는 방법을 알아보았습니다.