web-dev-qa-db-ja.com

Lodashは配列から重複を削除する

これは私のデータです:

[
    {
        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キーを持つオブジェクトを削除するにはどうすればいいですか?フィルター、地図、そしてユニークなものがあるが、よくわからない。

私の実際のデータセットははるかに大きく、より多くのキーを持っていますが、概念は同じであるべきです。

165
ChrisRich

lodash 4.0.0には この重大な変更点 があるため、_.uniqは現在のバージョンでは機能しません。だからどちらかを使う

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

または

_.uniqBy(data, 'id');

ドキュメント: https://lodash.com/docs#uniqBy


Lodashの古いバージョン(<4.0.0)用

データはidによって一意であり、データはdata変数に格納されていると仮定すると、 uniq() 関数を次のように使用できます。

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

あるいは単に

_.uniq(data, 'id');
318
ntalbs

あなたは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

43
zdrsoft

単に _.uniqBy() を使用してください。それは配列の重複のないバージョンを作成します。

これは新しい方法で、4.0.0バージョンから利用可能です。

_.uniqBy(data, 'id');

または

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

次のように、 unionBy を4.0.0以降に使用することもできます。let uniques = _.unionBy(data、 'id')

1
Himanshu Tanwar

単純な配列の場合は、単純に union を使用します。

0
Vixson