[英]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
按降序對時間進行排序,以確保我們按最高時間順序唯一地刪除每個商品的相同user
和id
。 最后,我們使用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.