Как этого добиться в lodash - PullRequest
0 голосов
/ 03 июня 2018

У меня есть массив, который выглядит следующим образом:

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, а для идентификатора - 70, и у нас также есть пользователь 70 и идентификаторы 50 для obj2, если в массиве есть еще один объект, который разделяет пользователя <> id - id <> и выводит из него недавнее значение времени.

Ответы [ 2 ]

0 голосов
/ 03 июня 2018

Вы можете использовать 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>
0 голосов
/ 03 июня 2018

Вам нужно отфильтровать по id

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

Вы можете использовать core js

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