Skip to content
On this page

maxBy 据给定条件找到最大的数组项

💡 Guide:
需要实现以下效果:

js
const data = [{ value: 6 }, { value: 2 }, { value: 4 }];
maxBy(data, (x) => x.value);
// { value: 6 }

如果最大项有多个,则都返回:

js
const data = [{ value: 6 }, { value: 2 }, { value: 4 }, { value: 6 }];
maxBy(data, (x) => x.value);
// [{ value: 6 }, { value: 6 }]

实现

js
const maxBy = (arr, keyBy) => {
  const res = []
  let maxVal = -Infinity
  arr.forEach(item => {
    const val = keyBy(item)
    if (val > maxVal) {
      res.length = 0
      res.push(item)
      maxVal = val
    } else if (val === maxVal) {
      res.push(item)
    }
  })
  return res
}
// 使用
const data = [{ value: 6 }, { value: 2 }, { value: 4 }, { value: 6 }]
console.log(maxBy(data, x => x.value))
// [{ value: 6 }, { value: 6 }]