我有这个数组:
const obj = [
{
value: 1,
position: 1,
id: 333,
},
{
value: 1,
position: 2,
id: 222,
},
];
我正在使用 lodash 中的 maxBy 来获取名为value的属性的最大值。
_.maxBy(obj, "value");
所以,问题是有两个对象具有相同的值属性,maxBy向我展示了最后一个对象。在这种情况下,我需要同时使用maxBy,将较小的值引用到位置属性。
有什么帮助吗?
_.maxBy
接受iteratee
作为第二个参数,我们可以自定义iteratee
。您当前的方式是使用_.property
迭代速记。
适合您案例的解决方案:
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
。