Lodash usuwa duplikaty z tablicy


232

To są moje dane:

[
    {
        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"    
    }
]

W Lodash, jak mogę usunąć obiekty ze zduplikowanymi kluczami identyfikacyjnymi? Coś z filtrem, mapą i unikalne, ale nie do końca pewne.

Mój prawdziwy zestaw danych jest znacznie większy i ma więcej kluczy, ale koncepcja powinna być taka sama.

Odpowiedzi:


439

_.uniquenie działa już dla bieżącej wersji, ponieważ lodash 4.0.0 ma tę przełomową zmianę . Funkcjonalnie został podzielony na _.uniq, _.sortedUniq, _.sortedUniqBy i _.uniqBy

Możesz użyć _.uniqByalbo

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

lub

_.uniqBy(data, 'id');

Dokumentacja: https://lodash.com/docs#uniqBy


Dla starszych wersji lodash (<4.0.0)

Zakładając, że dane powinny być unikalne idi twoje dane są przechowywane w datazmiennej, możesz użyć funkcji unique () w następujący sposób:

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

Lub po prostu

_.uniq(data, 'id');

1
Dokumenty Lodash 4.0.1 zmieniły to na uniqBy. Nie można sprawić, aby powyższy przykład działał przez całe życie, używając tylko uniq.
Will Lovett

2
W lodash 4.x uniq () akceptuje tylko jeden parametr, którym jest tablica. Tak jak powiedział @WillLovett, możemy użyć uniqBy (), aby rozwiązać ten problem.
ersefuril

1
O chłopie. Dlaczego, och dlaczego, to jest to, uniqco jest wymawiane jako kolejka kolanowa zamiast tego, co powinno być unique...
Josh M.

56

Możesz użyć metody lodash _.uniq Dzięki temu jest ona dostępna w aktualnej wersji lodash 4.17.2.

Przykład:

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 }]

Więcej informacji: https://lodash.com/docs/#uniqWith


6
`let uniqObjects = _.uniqBy (docs, function (e) {return ex + ey;}); `Ta metoda będzie szybsza dla dużych tablic z prostymi obiektami
tagplus5

2
tak, ale musisz przekazać atrybut jako pierwszy argument w uniqBy, co nie jest wygodne, jeśli chcesz, aby był unikalny w oparciu o kilka atrybutów, których jeszcze nie znasz
dbrrt

10

Lub po prostu użyj unii dla prostej tablicy.

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

// [1,2,3,5]

1
Podoba mi się ta odpowiedź. Nie jest to najbardziej czytelny, ale w rzeczywistości działa, jeśli myślisz o tym z perspektywy matematyki. _.union([1, 2, 2, 1, 3]) => [1, 2, 3]
Sepehr

5

Wystarczy użyć _.uniqBy () . Tworzy wolną od duplikatów wersję tablicy.

Jest to nowy sposób i dostępny od wersji 4.0.0.

_.uniqBy(data, 'id');

lub

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



1

W przypadku prostej tablicy masz podejście łączące, ale możesz także użyć:

_.uniq([2, 1, 2]);
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.