본문으로 건너뛰기

maxBy

배열의 각 요소에 iteratee 함수를 적용했을 때 최대값을 가지는 요소를 찾습니다.

  • 최대값이 여러 개일 경우 첫 번째 요소를 반환합니다.
  • 배열이 비어있다면 undefined를 반환합니다.
  • iteratee의 결과가 NaN인 요소가 있으면 해당 요소를 즉시 반환합니다. (built-in Math.max처럼 NaN을 우선합니다)
  • 비어 있지 않은 튜플 타입(readonly [T, ...T[]])을 전달하면 반환 타입이 T로 추론됩니다.

Code​

🔗 실제 구현 코드 확인


Interface​

typescript
function maxBy<T>(
items: readonly [T, ...T[]],
iteratee: (element: T, index: number, array: T[] | readonly T[]) => number
): T;

function maxBy<T>(
items: readonly T[],
iteratee: (element: T, index: number, array: T[] | readonly T[]) => number
): T | undefined;

Usage​

typescript
import { maxBy } from '@modern-kit/utils';

maxBy([{ a: 1 }, { a: 2 }, { a: 3 }], (x) => x.a); // { a: 3 }
maxBy([] as { a: number }[], (x) => x.a); // undefined
maxBy([3, NaN, 1], (x) => x); // NaN

maxBy(
[
{ name: 'john', age: 30 },
{ name: 'jane', age: 28 },
{ name: 'joe', age: 26 },
],
(x) => x.age
); // { name: 'john', age: 30 }