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) // 按权重随机选择的水果
注意事项
- 范围: 默认不包含最大值,使用inclusive参数可以包含
- 浮点数: 返回的可能是浮点数,即使输入是整数
- 性能: 生成随机数的性能很好
- 分布: 生成的是均匀分布的随机数
- 种子: 没有固定的种子,每次运行结果都不同
与其他方法的区别
Math.random()
: 只生成0到1之间的随机数random()
: radash提供的更灵活的随机数生成crypto.getRandomValues()
: 更安全的随机数,但更复杂
实际应用场景
- 游戏: 生成随机事件和数值
- 测试: 生成测试数据
- 模拟: 模拟随机过程
- UI: 生成随机颜色和位置
- 算法: 随机化算法和数据结构