Как получить уникальный и максимальный элемент из массива с помощью Lodash

1
var data = [
  {
    label: 'tagA',
    value: 1
  },
  {
    label: 'tagB',
    value: 2
  },
  {
    label: 'tagC',
    value: 3
  },
  {
    label: 'tagB',
    value: 4
  },
  {
    label: 'tagB',
    value: 5
  },
];

From Above Array Я хочу получить уникальный элемент на основе id и max value, используя lodash

Теги:
lodash

2 ответа

0
Лучший ответ

Вот решение lodash, которое использует lodash#orderBy и lodash#uniqBy.

var result = _(data)
  .orderBy(['label', 'value'], ['asc', 'desc'])
  .uniqBy('label')
  .value();

var data = [
  {
    label: 'tagA',
    value: 1
  },
  {
    label: 'tagB',
    value: 2
  },
  {
    label: 'tagC',
    value: 3
  },
  {
    label: 'tagB',
    value: 4
  },
  {
    label: 'tagB',
    value: 5
  },
];

var result = _(data)
  .orderBy(['label', 'value'], ['asc', 'desc'])
  .uniqBy('label')
  .value();
  
console.log(result);
.as-console-wrapper{min-height:100%;top: 0}
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
2

Решение ES5 с использованием массива # уменьшает:

var data = [{"label":"tagA","value":1},{"label":"tagB","value":2},{"label":"tagC","value":3},{"label":"tagB","value":4},{"label":"tagB","value":5}];

var helper = {};
var result = data.reduce(function(r, o) {
  if(!helper[o.label]) {
    r.push((helper[o.label] = Object.assign(o)));
  } else {
    o.value > helper[o.label].value && (helper[o.label].value = o.value);
  }
  
  return r;
}, []);

console.log(result);

Решение ES6 с использованием массива Array # уменьшает и Map, чтобы собирать уникальные значения, а затем использовать значения Map # и распространять синтаксис для получения массива:

const data = [{"label":"tagA","value":1},{"label":"tagB","value":2},{"label":"tagC","value":3},{"label":"tagB","value":4},{"label":"tagB","value":5}];

const result = [...data.reduce((map, o) => 
  map.has(o.label) && map.get(o.label).value > o.value ? 
    map : map.set(o.label, o), new Map).values()];
console.log(result);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню