簡體   English   中英

如何在lodash中實現這一目標

[英]How to achieve this in lodash

我有看起來像這樣的數組:

var arr = [
{user: 50, id: 70, time: '14:30'}, // ignore this user 50
{user: 70 id: 50, time: '14:50'}, // output this time is higher id 50
{user: 83, id: 50, time: '18:30'}
];

我想要的結果是按時間從數組中獲取唯一的用戶或id對象:

var result = [
{user: 83, id: 50, time: 18:30},
{user: 70, id: 50, time: 14:50}
];

要么

var arr = [
    {user: 70, id: 50, time: '14:30'}, // ignores this // id 50
    {user: 50 id: 70, time: '14:50'}, // output this // user 50
    {user: 83, id: 50, time: '18:30'}
    ];

然后結果應該降低

var result = [
    {user: 83, id: 50, time: 18:30},
    {user: 50, id: 70, time: 14:50}
    ];

我想要什么的進一步解釋。 考慮obj1用戶為50且id為70,只要數組中還有另一個共享用戶<> id-id <> user的對象,我們也將obj2用戶70和id為50。

您可以使用lodash#orderBy按降序對時間進行排序,以確保我們按最高時間順序唯一地刪除每個商品的相同userid 最后,我們使用lodash#uniqWith進行比較。

var result = _(arr)
  .orderBy('time', 'desc')
  .uniqWith((v1, v2) => v1.id === v2.user && v1.user === v2.id)
  .value();

 // First data set var arr = [ {user: 50, id: 70, time: '14:30'}, // ignore this user 50 {user: 70, id: 50, time: '14:50'}, // output this time is higher id 50 {user: 83, id: 50, time: '18:30'} ]; var result = _(arr) .orderBy('time', 'desc') .uniqWith((v1, v2) => v1.id === v2.user && v1.user === v2.id) .value(); console.log('First data set'); console.log(result); // Second data set arr = [ {user: 70, id: 50, time: '14:30'}, // ignores this // id 50 {user: 50, id: 70, time: '14:50'}, // output this // user 50 {user: 83, id: 50, time: '18:30'} ]; result = _(arr) .orderBy('time', 'desc') .uniqWith((v1, v2) => v1.id === v2.user && v1.user === v2.id) .value(); console.log('Second data set'); console.log(result); 
 .as-console-wrapper{min-height: 100%;top: 0;} 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.10/lodash.min.js"></script> 

您需要按id進行過濾

_.filter(arr, obj => obj.id === 50);

您可以使用核心js

arr.filter(item => item.id === 50)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM