Skip to content

random

生成指定范圍內的隨機數。

基礎用法

typescript
import { random } from 'radash'

console.log(random(1, 10))      // 生成1到10之間的隨機整數
console.log(random(0, 1))       // 生成0到1之間的隨機浮點數
console.log(random(10, 20, true)) // 生成10到20之間的隨機整數

語法

typescript
function random(
  min: number,
  max: number,
  inclusive?: boolean
): number

參數

  • min (number): 最小值
  • max (number): 最大值
  • inclusive (boolean, 可選): 是否包含最大值,默認為false

返回值

返回一個在指定范圍內的隨機數。

示例

生成整數

typescript
import { random } from 'radash'

console.log(random(1, 10))      // 1到9之間的隨機整數
console.log(random(1, 10, true)) // 1到10之間的隨機整數
console.log(random(0, 100))     // 0到99之間的隨機整數
console.log(random(-10, 10))    // -10到9之間的隨機整數

生成浮點數

typescript
import { random } from 'radash'

console.log(random(0, 1))       // 0到1之間的隨機浮點數
console.log(random(0, 1, true)) // 0到1之間的隨機浮點數(包含1)
console.log(random(1.5, 2.5))   // 1.5到2.5之間的隨機浮點數
console.log(random(-1, 1))      // -1到1之間的隨機浮點數

生成特定范圍的數字

typescript
import { random } from 'radash'

// 生成1到6的骰子數字
const dice = random(1, 6, true)
console.log(dice) // 1, 2, 3, 4, 5, 或 6

// 生成0到9的數字
const digit = random(0, 9, true)
console.log(digit) // 0到9之間的數字

// 生成百分比
const percentage = random(0, 100, true)
console.log(percentage) // 0到100之間的數字

生成價格范圍

typescript
import { random } from 'radash'

// 生成10到100之間的價格
const price = random(10, 100)
console.log(price) // 10到99之間的數字

// 生成帶小數的價格
const priceWithDecimals = random(10, 100) + random(0, 99) / 100
console.log(priceWithDecimals) // 10.00到99.99之間的數字

生成顏色值

typescript
import { random } from 'radash'

// 生成RGB顏色值
const r = random(0, 255, true)
const g = random(0, 255, true)
const b = random(0, 255, true)

const rgbColor = `rgb(${r}, ${g}, ${b})`
console.log(rgbColor) // 例如: rgb(123, 45, 67)

// 生成十六進制顏色
const hexColor = `#${random(0, 16777215, true).toString(16).padStart(6, '0')}`
console.log(hexColor) // 例如: #7b2d43

生成時間戳

typescript
import { random } from 'radash'

// 生成過去一年的隨機時間戳
const oneYearAgo = Date.now() - 365 * 24 * 60 * 60 * 1000
const randomTimestamp = random(oneYearAgo, Date.now())
console.log(new Date(randomTimestamp)) // 過去一年內的隨機日期

// 生成特定日期范圍內的隨機日期
const startDate = new Date('2023-01-01').getTime()
const endDate = new Date('2023-12-31').getTime()
const randomDate = new Date(random(startDate, endDate))
console.log(randomDate) // 2023年內的隨機日期

生成數組索引

typescript
import { random } from 'radash'

const fruits = ['apple', 'banana', 'cherry', 'date', 'elderberry']

// 隨機選擇一個水果
const randomIndex = random(0, fruits.length - 1, true)
const randomFruit = fruits[randomIndex]
console.log(randomFruit) // 隨機的水果名稱

// 隨機選擇多個水果(不重復)
function getRandomFruits(array: string[], count: number) {
  const shuffled = [...array].sort(() => random(-1, 1))
  return shuffled.slice(0, count)
}

const randomFruits = getRandomFruits(fruits, 3)
console.log(randomFruits) // 3個隨機的水果

生成測試數據

typescript
import { random } from 'radash'

// 生成隨機用戶數據
function generateRandomUser() {
  const names = ['Alice', 'Bob', 'Charlie', 'Diana', 'Eve']
  const cities = ['Beijing', 'Shanghai', 'Guangzhou', 'Shenzhen', 'Hangzhou']
  
  return {
    id: random(1, 1000, true),
    name: names[random(0, names.length - 1, true)],
    age: random(18, 65, true),
    city: cities[random(0, cities.length - 1, true)],
    score: random(0, 100, true)
  }
}

const user = generateRandomUser()
console.log(user)
// 例如: { id: 123, name: 'Alice', age: 25, city: 'Beijing', score: 85 }

生成坐標

typescript
import { random } from 'radash'

// 生成屏幕坐標
const screenWidth = 1920
const screenHeight = 1080

const x = random(0, screenWidth, true)
const y = random(0, screenHeight, true)

console.log(`坐標: (${x}, ${y})`) // 例如: 坐標: (1234, 567)

// 生成圓形區域內的隨機點
function randomPointInCircle(centerX: number, centerY: number, radius: number) {
  const angle = random(0, 2 * Math.PI, true)
  const distance = random(0, radius, true)
  
  return {
    x: centerX + distance * Math.cos(angle),
    y: centerY + distance * Math.sin(angle)
  }
}

const point = randomPointInCircle(100, 100, 50)
console.log(point) // 圓心(100,100)半徑50內的隨機點

生成權重隨機選擇

typescript
import { random } from 'radash'

function weightedRandom<T>(items: T[], weights: number[]): T {
  const totalWeight = weights.reduce((sum, weight) => sum + weight, 0)
  let randomValue = random(0, totalWeight)
  
  for (let i = 0; i < items.length; i++) {
    randomValue -= weights[i]
    if (randomValue <= 0) {
      return items[i]
    }
  }
  
  return items[items.length - 1]
}

const fruits = ['apple', 'banana', 'cherry']
const weights = [0.5, 0.3, 0.2] // 50%, 30%, 20%的概率

const selectedFruit = weightedRandom(fruits, weights)
console.log(selectedFruit) // 按權重隨機選擇的水果

注意事項

  1. 范圍: 默認不包含最大值,使用inclusive參數可以包含
  2. 浮點數: 返回的可能是浮點數,即使輸入是整數
  3. 性能: 生成隨機數的性能很好
  4. 分布: 生成的是均勻分布的隨機數
  5. 種子: 沒有固定的種子,每次運行結果都不同

與其他方法的區別

  • Math.random(): 只生成0到1之間的隨機數
  • random(): radash提供的更靈活的隨機數生成
  • crypto.getRandomValues(): 更安全的隨機數,但更復雜

實際應用場景

  1. 游戲: 生成隨機事件和數值
  2. 測試: 生成測試數據
  3. 模擬: 模擬隨機過程
  4. UI: 生成隨機顏色和位置
  5. 算法: 隨機化算法和數據結構

Released under the MIT License.