Lodash는 배열에서 중복 제거


232

이것은 내 데이터입니다.

[
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello',
        id: "22"    
    },
    {
        url: 'www.example.com/hello-how-are-you',
        id: "23"    
    },
    {
        url: 'www.example.com/i-like-cats',
        id: "24"    
    },
    {
        url: 'www.example.com/i-like-pie',
        id: "25"    
    }
]

Lodash를 사용하면 중복 ID 키가있는 객체를 어떻게 제거 할 수 있습니까? 필터, 맵 및 고유 한 항목이지만 확실하지 않습니다.

내 실제 데이터 세트는 훨씬 크고 키가 더 많지만 개념은 동일해야합니다.

답변:


439

_.uniquelodash 4.0.0에 이러한 주요 변경 사항이 있으므로 현재 버전에서 더 이상 작동하지 않습니다. . 기능적으로 _.uniq, _.sortedUniq, _.sortedUniqBy 및 _.uniqBy로 분할되었습니다.

_.uniqBy어느 쪽이든 사용할 수 있습니다

_.uniqBy(data, function (e) {
  return e.id;
});

또는

_.uniqBy(data, 'id');

설명서 : https://lodash.com/docs#uniqBy


lodash의 이전 버전 (<4.0.0)

데이터가 고유해야 id하고 데이터가 data변수에 저장되어 있다고 가정하면 다음과 같이 unique () 함수를 사용할 수 있습니다 .

_.unique(data, function (e) {
  return e.id;
});

아니면 간단히

_.uniq(data, 'id');

1
lodash 4.0.1 문서가 이것을 uniqBy로 변경했습니다. 위의 예제를 사용하여 uniq 만 사용하여 평생 동안 일할 수 없었습니다.
Will Lovett

2
lodash 4.x에서 uniq ()는 하나의 매개 변수 (배열) 만 허용합니다. @WillLovett가 말했듯이 uniqBy ()를 사용 하여이 문제를 해결할 수 있습니다.
ersefuril

1
오 소년. 왜, 어째서, 왜 그래야하는지 대신 니-니-큐uniq 라고 발음 되는가 ?unique
Josh M.

56

lodash 메소드 _.uniqWith를 사용할 수 있습니다. lodash 4.17.2의 현재 버전에서 사용 가능합니다.

예:

var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];

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

더 많은 정보 : https://lodash.com/docs/#uniqWith


6
`let uniqObjects = _.uniqBy (docs, function (e) {return ex + ey;}); `이 방법은 간단한 객체를 가진 큰 배열에 더 빠를 것입니다
tagplus5

2
예. 그러나 uniqBy를 사용하여 속성을 첫 번째 인수로 전달해야합니다. 아직 모르는 여러 속성을 기반으로 고유 한 속성을 원할 경우 편리하지 않습니다.
dbrrt

10

또는 단순히 배열을 사용하려면 union을 사용하십시오 .

_.union([1,2,3,3], [3,5])

// [1,2,3,5]

1
나는이 답변을 좋아한다. 가장 읽기 쉬운 것은 아니지만 수학 관점에서 생각하면 실제로 작동합니다. _.union([1, 2, 2, 1, 3]) => [1, 2, 3]
Sepehr

5

_.uniqBy ()를 사용 하십시오 . 중복없는 버전의 배열을 만듭니다.

이것은 새로운 방법이며 4.0.0 버전에서 사용할 수 있습니다.

_.uniqBy(data, 'id');

또는

_.uniqBy(data, obj => obj.id);



1

간단한 배열의 경우 공용체 접근 방식이 있지만 다음을 사용할 수도 있습니다.

_.uniq([2, 1, 2]);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.