summaryrefslogtreecommitdiff
path: root/packages/frontend/src/scripts/shuffle.ts
blob: 05e6cdfbcf9b4aa649de9e9d7d8ba8426e852c81 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
/**
 * 配列をシャッフル (破壊的)
 */
export function shuffle<T extends any[]>(array: T): T {
	let currentIndex = array.length, randomIndex;

	// While there remain elements to shuffle.
	while (currentIndex !== 0) {
		// Pick a remaining element.
		randomIndex = Math.floor(Math.random() * currentIndex);
		currentIndex--;

		// And swap it with the current element.
		[array[currentIndex], array[randomIndex]] = [
			array[randomIndex], array[currentIndex]];
	}

	return array;
}