[1일 3 Lodash 공부방] difference, differenceBy, differenceWith

Nekoromancer·2021년 5월 25일
0

1일 3 Lodash 공부방

목록 보기
2/4

1. _.diffrence

_.difference(array, [values])

두 배열을 받아 앞의 배열에서 뒤의 배열과 다른 요소들을 모아 배열로 반환한다. 배열 요소들의 순서는 상관 없다.

_.difference([2, 1], [2, 3]);
// => [1]

두 배열이 같다면 빈 배열을 반환한다.

_.difference([1, 2], [1, 2]);
// => []

fp 함수는 커링이 된다는 점을 제외하면 다른 부분은 없다.

fp.difference([2, 1])([2, 3]);
// => [1]

2 _.differenceBy

_.differenceBy(array, [values], [iteratee=_.identity])

difference와의 차이점은 추가로 반복 대상 함수를 인자로 받는다. 주어진 배열들은 함수에 의해 한번 순회를 거친후에 비교되며, 반환되는 값 또한 이 함수에 의해 처리된 후의 형태로 반환된다.

_.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);
// => [1.2]

요소에 컬렉션을 받을 수도 있다. 다음의 예시는 컬렉션에서 오직 프로퍼티 x만을 기준으로 비교한다.

_.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], item => item.x);
// => [{ 'x': 2 }]

요소 비교의 경우 반복 대상 함수를 다음과 같은 축약형의 형태로 사용 가능하다.

_.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');
// => [{ 'x': 2 }]

fp함수의 경우 반복대상 함수를 먼저 받는다. 사실 이는 fp용 함수의 대원칙에 가깝기 때문에 알아두면 좋다.

fp.differenceBy('x')([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }]);
// => [{ 'x': 2 }]

3. _.differenceWith

_.differenceWith(array, [values], [comparator])

두 배열을 비교하여 다른 요소들을 찾아 배열로 반환해 주는 difference 메소드 시리즈의 마지막인 differenceWith 함수다. 마지막 인자로 비교 함수를 받으며, 이 함수는 각 요소들을 비교할때 "동일한지 여부"를 판단하는 함수로 활용된다.

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
 
_.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);
// => [{ 'x': 2, 'y': 1 }]

비교 함수는 두 개의 인자를 받는다. 예를들어 프로퍼티 x만의 동일성만을 비교하고 싶다면

(a, b) => a.x === b.x

와 같은 형태로 함수를 기술하면 될 것이다.

fp 함수는 비교 함수가 인자의 가장 앞으로 온다. 기억하자. 항상 함수가 앞이고, 데이터가 뒤다. 그리고 커링은 항상 된다.

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];
 
fp.differenceWith(fp.isEqual)(objects, [{ 'x': 1, 'y': 2 }]);
// => [{ 'x': 2, 'y': 1 }]
profile
고양이 앓이 중인 프론트엔드 개발자

0개의 댓글