Add getMiddleElement array util

This commit is contained in:
2024-12-05 11:15:51 +01:00
parent 7af53bbec0
commit 6efea94dd0
2 changed files with 30 additions and 1 deletions
+13 -1
View File
@@ -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();
});
});
+17
View File
@@ -73,3 +73,20 @@ export function groupBy<E, K>(
[] as { key: K; elements: Array<E> }[]
);
}
/**
* 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<E>(arr: ReadonlyArray<E>) {
return arr[Math.floor(arr.length / 2)];
}