Skip to content

shuffle ​

Randomly shuffle the order of elements in an array.

Syntax ​

typescript
shuffle<T>(array: T[]): T[]

Parameters ​

  • array (T[]): The array to shuffle

Return Value ​

  • T[]: A new array with the elements in shuffled order

Examples ​

Basic Usage ​

typescript
import { shuffle } from 'radash'

const numbers = [1, 2, 3, 4, 5]
const shuffled = shuffle(numbers)
// Might return: [3, 1, 5, 2, 4]

Handling String Array ​

typescript
import { shuffle } from 'radash'

const fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry']
const shuffledFruits = shuffle(fruits)
// Might return: ['cherry', 'apple', 'elderberry', 'banana', 'date']

Handling Object Array ​

typescript
import { shuffle } from 'radash'

const users = [
  { id: 1, name: 'Alice' },
  { id: 2, name: 'Bob' },
  { id: 3, name: 'Charlie' },
  { id: 4, name: 'Diana' }
]

const shuffledUsers = shuffle(users)
// Might return: [
//   { id: 3, name: 'Charlie' },
//   { id: 1, name: 'Alice' },
//   { id: 4, name: 'Diana' },
//   { id: 2, name: 'Bob' }
// ]

Handling Empty Array ​

typescript
import { shuffle } from 'radash'

const emptyArray: number[] = []
const shuffled = shuffle(emptyArray)
// []

Handling Single Element Array ​

typescript
import { shuffle } from 'radash'

const singleElement = ['hello']
const shuffled = shuffle(singleElement)
// ['hello'] (order unchanged)

Handling Mixed Type Array ​

typescript
import { shuffle } from 'radash'

const mixed = ['hello', 42, true, { key: 'value' }]
const shuffled = shuffle(mixed)
// Might return: [42, { key: 'value' }, 'hello', true]

Game Application ​

typescript
import { shuffle } from 'radash'

class CardGame {
  private deck = [
    'A♠', '2♠', '3♠', '4♠', '5♠', '6♠', '7♠', '8♠', '9♠', '10♠', 'J♠', 'Q♠', 'K♠',
    'A♥', '2♥', '3♥', '4♥', '5♥', '6♥', '7♥', '8♥', '9♥', '10♥', 'J♥', 'Q♥', 'K♥',
    'A♦', '2♦', '3♦', '4♦', '5♦', '6♦', '7♦', '8♦', '9♦', '10♦', 'J♦', 'Q♦', 'K♦',
    'A♣', '2♣', '3♣', '4♣', '5♣', '6♣', '7♣', '8♣', '9♣', '10♣', 'J♣', 'Q♣', 'K♣'
  ]

  shuffleDeck() {
    this.deck = shuffle(this.deck)
  }

  dealCards(count: number) {
    return this.deck.slice(0, count)
  }
}

const game = new CardGame()
game.shuffleDeck()
const hand = game.dealCards(5)
// Returns 5 random cards

Random Selector ​

typescript
import { shuffle } from 'radash'

class RandomSelector<T> {
  private items: T[]

  constructor(items: T[]) {
    this.items = [...items]
  }

  shuffle() {
    this.items = shuffle(this.items)
  }

  select(count: number): T[] {
    return this.items.slice(0, count)
  }

  selectAll(): T[] {
    return shuffle(this.items)
  }
}

const selector = new RandomSelector(['red', 'green', 'blue', 'yellow', 'purple'])
const colors = selector.select(3)
// Returns 3 random colors

Random Task Assignment ​

typescript
import { shuffle } from 'radash'

interface Task {
  id: number
  name: string
  priority: 'low' | 'medium' | 'high'
}

const tasks: Task[] = [
  { id: 1, name: 'Write documentation', priority: 'high' },
  { id: 2, name: 'Fix bug', priority: 'high' },
  { id: 3, name: 'Add tests', priority: 'medium' },
  { id: 4, name: 'Refactor code', priority: 'medium' },
  { id: 5, name: 'Update dependencies', priority: 'low' }
]

function assignRandomTasks(taskCount: number): Task[] {
  const shuffledTasks = shuffle(tasks)
  return shuffledTasks.slice(0, taskCount)
}

const assignedTasks = assignRandomTasks(3)
// Returns 3 random tasks

Random Color Generator ​

typescript
import { shuffle } from 'radash'

const colors = [
  '#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7',
  '#DDA0DD', '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E9'
]

function getRandomColors(count: number): string[] {
  return shuffle(colors).slice(0, count)
}

const randomColors = getRandomColors(5)
// Returns 5 random colors

Random Greeting ​

typescript
import { shuffle } from 'radash'

const greetings = [
  'Hello!',
  'Hi there!',
  'Good morning!',
  'Good afternoon!',
  'Good evening!',
  'Hey!',
  'Greetings!',
  'Welcome!'
]

function getRandomGreeting(): string {
  return shuffle(greetings)[0]
}

const greeting = getRandomGreeting()
// Returns a random greeting

Random Joke ​

typescript
import { shuffle } from 'radash'

const jokes = [
  "Why don't scientists trust atoms? Because they make up everything!",
  'Why did the scarecrow win an award? Because he was outstanding in his field!',
  "Why don't eggs tell jokes? They'd crack each other up!",
  'What do you call a fake noodle? An impasta!',
  'Why did the math book look so sad? Because it had too many problems!'
]

function getRandomJoke(): string {
  return shuffle(jokes)[0]
}

const joke = getRandomJoke()
// Returns a random joke

Random Password Generator ​

typescript
import { shuffle } from 'radash'

function generatePassword(length: number): string {
  const letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  const numbers = '0123456789'
  const symbols = '!@#$%^&*()_+-=[]{}|;:,.<>?'
  
  const allChars = letters + numbers + symbols
  const shuffledChars = shuffle(allChars.split(''))
  
  return shuffledChars.slice(0, length).join('')
}

const password = generatePassword(8)
// Generates an 8-character random password

Random Test Data ​

typescript
import { shuffle } from 'radash'

const testData = [
  { id: 1, value: 'test1' },
  { id: 2, value: 'test2' },
  { id: 3, value: 'test3' },
  { id: 4, value: 'test4' },
  { id: 5, value: 'test5' }
]

function getRandomTestData(count: number) {
  return shuffle(testData).slice(0, count)
}

const randomData = getRandomTestData(3)
// Returns 3 random test data

Random Sorting ​

typescript
import { shuffle } from 'radash'

const students = [
  { name: 'Alice', grade: 85 },
  { name: 'Bob', grade: 92 },
  { name: 'Charlie', grade: 78 },
  { name: 'Diana', grade: 95 },
  { name: 'Eve', grade: 88 }
]

function randomizePresentationOrder() {
  return shuffle(students)
}

const presentationOrder = randomizePresentationOrder()
// Returns a randomly sorted list of students

Notes ​

  1. Immutability: Does not modify the original array
  2. Randomness: Each call might return a different result
  3. Performance: Uses the Fisher-Yates shuffle algorithm
  4. Type Safety: Supports full TypeScript type inference

Differences from Other Functions ​

  • shuffle: Randomly shuffles the array order
  • draw: Randomly selects a single element
  • random: Generates random numbers
  • sample: Randomly selects multiple elements

Performance ​

  • Time Complexity: O(n), where n is the array length
  • Space Complexity: O(n)
  • Use Cases: Games, randomization, test data generation

Released under the MIT License.