From 6efea94dd04393c7b21bfb97b700c1bc0ee47a00 Mon Sep 17 00:00:00 2001 From: Pascal Syma Date: Thu, 5 Dec 2024 11:15:51 +0100 Subject: [PATCH] Add getMiddleElement array util --- utils/array.test.ts | 14 +++++++++++++- utils/array.ts | 17 +++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/utils/array.test.ts b/utils/array.test.ts index 46ceee8..b25e365 100644 --- a/utils/array.test.ts +++ b/utils/array.test.ts @@ -1,5 +1,11 @@ import { describe, expect, it } from 'bun:test'; -import { multArray, multBy, sumArray, sumBy } from './array.ts'; +import { + getMiddleElement, + multArray, + multBy, + sumArray, + sumBy +} from './array.ts'; describe('array utils', () => { it('sumArray number array', () => { @@ -127,4 +133,10 @@ describe('array utils', () => { expect(multBy([], (e) => e)).toBeFinite(); expect(multBy([], (e) => e)).toBe(0); }); + it('getMiddleElement', () => { + expect(getMiddleElement([1, 2, 3, 4])).toBe(3); + expect(getMiddleElement([1, 2, 3])).toBe(2); + expect(getMiddleElement([1])).toBe(1); + expect(getMiddleElement([])).toBeUndefined(); + }); }); diff --git a/utils/array.ts b/utils/array.ts index 09f6b7d..f56c7ed 100644 --- a/utils/array.ts +++ b/utils/array.ts @@ -73,3 +73,20 @@ export function groupBy( [] as { key: K; elements: Array }[] ); } + +/** + * Return the middle Element of an array, rounding up. + * Returns undefined for empty arrays without throwing! + * + * @example + * ```typescript + * getMiddleElement([1, 2, 3, 4]) === 3 + * getMiddleElement([1, 2, 3]) === 2 + * getMiddleElement([1]) === 1 + * getMiddleElement([]) === undefined + * ``` + * @param arr + */ +export function getMiddleElement(arr: ReadonlyArray) { + return arr[Math.floor(arr.length / 2)]; +}