0

我有这个数组:

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

我正在使用 lodash 中的 maxBy 来获取名为value的属性的最大值。

_.maxBy(obj, "value");

所以,问题是有两个对象具有相同的属性,而maxBy向我展示了最后一个对象。在这种情况下,我需要同时创建maxBy,将较小的值引用到position属性。

有什么帮助吗?

4

1 回答 1

0

_.maxBy接受iteratee作为第二个参数,我们可以自定义iteratee. 您当前的方法是使用_.propertyiteratee 速记。

您的情况的解决方案:

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

于 2020-10-15T00:23:51.690 回答