draw
Randomly select an element from an array.
Syntax
typescript
draw<T>(
array: T[]
): T | undefined
Parameters
array
(T[]): The array to select from
Return Value
T | undefined
: The randomly selected element, or undefined if the array is empty
Examples
Basic Usage
typescript
import { draw } from 'radash'
const fruits = ['apple', 'banana', 'cherry', 'date']
const randomFruit = draw(fruits)
// Might return: 'apple', 'banana', 'cherry', or 'date'
Handling Empty Array
typescript
import { draw } from 'radash'
const emptyArray: string[] = []
const result = draw(emptyArray)
// undefined
Handling Single Element Array
typescript
import { draw } from 'radash'
const singleElement = ['hello']
const result = draw(singleElement)
// 'hello'
Handling Number Array
typescript
import { draw } from 'radash'
const numbers = [1, 2, 3, 4, 5, 6]
const randomNumber = draw(numbers)
// Might return: 1, 2, 3, 4, 5, or 6
Handling Object Array
typescript
import { draw } from 'radash'
const users = [
{ id: 1, name: 'Alice' },
{ id: 2, name: 'Bob' },
{ id: 3, name: 'Charlie' }
]
const randomUser = draw(users)
// Might return: { id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }, or { id: 3, name: 'Charlie' }
Handling Mixed Type Array
typescript
import { draw } from 'radash'
const mixed = ['hello', 42, true, { key: 'value' }]
const randomItem = draw(mixed)
// Might return: 'hello', 42, true, or { key: 'value' }
Game Application
typescript
import { draw } 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♣'
]
drawCard(): string | undefined {
return draw(this.deck)
}
}
const game = new CardGame()
const card = game.drawCard()
// Might return: 'A♠', '2♥', 'K♦', etc.
Random Selector
typescript
import { draw } from 'radash'
class RandomSelector<T> {
private items: T[]
constructor(items: T[]) {
this.items = [...items]
}
select(): T | undefined {
return draw(this.items)
}
selectMultiple(count: number): T[] {
const result: T[] = []
for (let i = 0; i < count && this.items.length > 0; i++) {
const item = draw(this.items)
if (item !== undefined) {
result.push(item)
// Remove the selected item from the array
const index = this.items.indexOf(item)
if (index > -1) {
this.items.splice(index, 1)
}
}
}
return result
}
}
const selector = new RandomSelector(['red', 'green', 'blue', 'yellow'])
const color = selector.select()
// Might return: 'red', 'green', 'blue', or 'yellow'
Random Task Assignment
typescript
import { draw } 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 assignRandomTask(): Task | undefined {
return draw(tasks)
}
const assignedTask = assignRandomTask()
// Might return any task
Random Color Generator
typescript
import { draw } from 'radash'
const colors = [
'#FF6B6B', '#4ECDC4', '#45B7D1', '#96CEB4', '#FFEAA7',
'#DDA0DD', '#98D8C8', '#F7DC6F', '#BB8FCE', '#85C1E9'
]
function getRandomColor(): string | undefined {
return draw(colors)
}
const color = getRandomColor()
// Might return any color value
Random Greeting
typescript
import { draw } from 'radash'
const greetings = [
'Hello!',
'Hi there!',
'Good morning!',
'Good afternoon!',
'Good evening!',
'Hey!',
'Greetings!',
'Welcome!'
]
function getRandomGreeting(): string | undefined {
return draw(greetings)
}
const greeting = getRandomGreeting()
// Might return any greeting
Random Joke
typescript
import { draw } 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 | undefined {
return draw(jokes)
}
const joke = getRandomJoke()
// Might return any joke
Random Password Generator
typescript
import { draw } from 'radash'
const letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
const numbers = '0123456789'
const symbols = '!@#$%^&*()_+-=[]{}|;:,.<>?'
function generatePassword(length: number): string {
const allChars = letters + numbers + symbols
let password = ''
for (let i = 0; i < length; i++) {
const char = draw(allChars.split(''))
if (char !== undefined) {
password += char
}
}
return password
}
const password = generatePassword(8)
// Generates an 8-character random password
Notes
- Randomness: Each call might return a different result
- Empty Array: If the array is empty, it returns undefined
- No Modification: Does not modify the original array
- Type Safety: Supports full TypeScript type inference
Differences from Other Functions
draw
: Randomly selects one elementshuffle
: Randomly shuffles the array orderrandom
: Generates random numberssample
: Randomly selects multiple elements
Performance
- Time Complexity: O(1)
- Space Complexity: O(1)
- Use Cases: Random selection, game logic, randomization