Skip to content

Commit 75c139d

Browse files
committed
feat: added getRandomItem()
1 parent 70ccba0 commit 75c139d

2 files changed

Lines changed: 31 additions & 0 deletions

File tree

src/getRandomItem.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { randomInt } from './randomInt.js';
2+
3+
export function getRandomItem(input: []): undefined;
4+
5+
export function getRandomItem<T>(input: [T, ...T[]]): T;
6+
7+
export function getRandomItem<T>(input: T[]): T | undefined {
8+
switch (input.length) {
9+
case 0:
10+
return;
11+
case 1:
12+
return input[0];
13+
default:
14+
return input[randomInt(0, input.length)];
15+
}
16+
}

test/getRandomItem.test.ts

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { describe, expect, it } from 'vitest';
2+
3+
import { getRandomItem } from '../src/getRandomItem.js';
4+
5+
describe('getRandomItem()', () => {
6+
it('Returns a random item from an array', () => {
7+
expect(getRandomItem([1])).toEqual(1);
8+
9+
expect(getRandomItem([1, 2, 3])).toBeTypeOf('number');
10+
});
11+
12+
it('Returns undefined when input is empty', () => {
13+
expect(getRandomItem([])).toBeUndefined();
14+
});
15+
});

0 commit comments

Comments
 (0)