2016-05-17 5 views
1

私は以下のデータ構造を持っています。Lodashはコレクションからコレクションを作成します

var data = [{ 
    "username": "admin", 
    "update": "19/07/2015 17:44:14" 
}, { 
    "username": "admin", 
    "update": "19/07/2015 17:00" 
}, { 
    "username": "joebloggs", 
    "update": "19/07/2015 17:00" 
}, { 
    "username": "joebloggs", 
    "update": "19/07/2015 17:44:14" 
}]; 

lodashライブラリを使用して、次のデータ構造を作成します。

var newData = [{ 
    "username": "admin", 
    "update": "19/07/2015 17:00" 
}, { 
    "username": "joebloggs", 
    "update": "19/07/2015 17:00" 
}]; 

あなたが見ることができるように、私は、重複する名前を削除し、唯一の最新の日付を格納する必要があります。

答えて

4

orderBy()を使用して、updateの値を降順で並べ替え、次にuniqBy()を使用して重複する値を削除することができます。

var data = [{ 
 
    "username": "admin", 
 
    "update": "19/07/2015 17:44:14" 
 
}, { 
 
    "username": "admin", 
 
    "update": "19/07/2015 17:00" 
 
}, { 
 
    "username": "joebloggs", 
 
    "update": "19/07/2015 17:00" 
 
}, { 
 
    "username": "joebloggs", 
 
    "update": "19/07/2015 17:44:14" 
 
}]; 
 

 
var result = _(data) 
 
    .orderBy(v => new Date(v.update), 'desc') 
 
    .uniqBy('username') 
 
    .value(); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdn.jsdelivr.net/lodash/4.12.0/lodash.min.js"></script>

UPDATE

私はリファレンスとしてDate documentation確認し、update日付値がIETF-compliant RFC 2822 timestampsversion of ISO8601日付フォーマットに準拠していないことに気づきました。したがって、上記の解決策は、基準の最新の日付で正しく適用されません。

あなたはこの問題を解決するための2つのオプションがあります。

  1. 変更するには、ソース(バックエンドまたはどちらかあなたからそれを得たリソース)からupdate日付値をフォーマットする方法を。このようにして上記の解決方法が適用されます。

  2. 実行時に日付形式を変換します。このための解決策を以下に示します。

var data = [{ 
 
    "username": "admin", 
 
    "update": "19/07/2015 17:44:14" 
 
}, { 
 
    "username": "admin", 
 
    "update": "19/07/2015 17:00" 
 
}, { 
 
    "username": "joebloggs", 
 
    "update": "19/07/2015 17:00" 
 
}, { 
 
    "username": "joebloggs", 
 
    "update": "19/07/2015 17:44:14" 
 
}]; 
 

 
var result = _(data) 
 
    .orderBy(v => { 
 
    var ds = v.update.split(' '); 
 
    ds[0] = ds[0].split('/').reverse().join('/'); 
 
    return new Date(ds.join(' ')); 
 
    }, 'desc') 
 
    .uniqBy('username') 
 
    .value(); 
 

 
document.write('<pre>' + JSON.stringify(result, 0, 4) + '</pre>');
<script src="https://cdn.jsdelivr.net/lodash/4.12.0/lodash.min.js"></script>

+0

どのようにそれはそれは簡単なことができますか?私は頭の中でこれを取り巻くために一日中頭を悩ましてきました。ありがとうございます – MindVox

+0

更新を確認してください。 – ryeballar

+0

ありがとう、それは私がいくつかのレポートを生成しようとしている古いシステムです。これは私たちが解決したいものではありませんが、私たちの新しいソリューションはこれを解決します。ここに更新をお寄せいただきありがとうございます、これは将来的に私にとって参考になるでしょう。あなたは 'update'で素晴らしいフォーマットを得るためにmomentjを使う方法を知っていますか? – MindVox

関連する問題