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、2016年

2
lodash 4.xでは、uniq()は配列である1つのパラメーターのみを受け入れます。@WillLovettが言ったように、この問題を解決するためにuniqBy()を使用できます。
ersefuril 2016年

1
ああ少年。なぜ、ああ、なぜ、本来あるべき姿ではなく、you-knee-queueuniqと発音されるのでしょう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


4

lodashバージョン4+では、特定のプロパティまたはオブジェクト全体のいずれかによって、次のように重複オブジェクトを削除します。

var users = [
  {id:1,name:'ted'},
  {id:1,name:'ted'},
  {id:1,name:'bob'},
  {id:3,name:'sara'}
];
var uniqueUsersByID = _.uniqBy(users,'id'); //removed if had duplicate id
var uniqueUsers = _.uniqWith(users, _.isEqual);//removed complete duplicates

出典:https : //www.codegrepper.com/?search_term=Lodash+remove+duplicates+from+array



1

単純な配列の場合、ユニオンアプローチがありますが、次のものも使用できます。

_.uniq([2, 1, 2]);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.