#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
.