Получение объектов с помощью maxBy с одинаковыми значениями

#javascript #arrays #lodash #maxby

#javascript #массивы #Lodash #maxby

Вопрос:

У меня есть этот массив:

 const obj = [
  {
    value: 1,
    position: 1,
    id: 333,
  },
  {
    value: 1,
    position: 2,
    id: 222,
  },
];
  

Я использую maxBy из Lodash, чтобы получить максимальное значение атрибута, называемого value .

 _.maxBy(obj, "value");
  

Итак, проблема в том, что есть два объекта с одинаковым атрибутом value, и maxBy показывает мне последний объект. В этом случае мне нужно было бы создать maxBy и в то же время, сославшись на меньшее значение атрибута position.

Любая помощь?

Ответ №1:

_.maxBy принимает iteratee в качестве вторых параметров, мы можем настроить iteratee . Ваш текущий способ использует _.property сокращение iteratee.

Решение для вашего случая:

 const arr = [
  {
    value: 1,
    position: 1,
    id: 333,
  },
  {
    value: 1,
    position: 2,
    id: 222,
  },
];

const result = _.maxBy(arr, (i) => {
  const isDuplicate = _.filter(arr, (o) => o.value === i.value).length;
  return i.value - (isDuplicate ? i.position : 0); // get max value of (i.value - i.position) when we get duplicate case.
});
console.log(result);
  

В вашем случае, чтобы получить максимальное значение (i.value - i.position) , нам нужно максимальное значение
value и минимальное значение position .