inRange
检查数值是否在指定范围内。
语法
typescript
inRange(
value: number,
min: number,
max: number,
inclusive?: boolean
): boolean
参数
value
(number): 要检查的数字min
(number): 范围的最小值max
(number): 范围的最大值inclusive
(boolean, 可选): 是否包含边界值,默认为 true
返回值
boolean
: 如果数字在范围内返回 true,否则返回 false
示例
基本用法
typescript
import { inRange } from 'radash'
inRange(5, 1, 10) // true
inRange(1, 1, 10) // true
inRange(10, 1, 10) // true
inRange(0, 1, 10) // false
inRange(11, 1, 10) // false
不包含边界值
typescript
import { inRange } from 'radash'
inRange(5, 1, 10, false) // true
inRange(1, 1, 10, false) // false
inRange(10, 1, 10, false) // false
inRange(2, 1, 10, false) // true
inRange(9, 1, 10, false) // true
处理负数
typescript
import { inRange } from 'radash'
inRange(-5, -10, 0) // true
inRange(-10, -10, 0) // true
inRange(0, -10, 0) // true
inRange(-11, -10, 0) // false
inRange(1, -10, 0) // false
处理小数
typescript
import { inRange } from 'radash'
inRange(3.5, 1, 5) // true
inRange(1.0, 1, 5) // true
inRange(5.0, 1, 5) // true
inRange(0.5, 1, 5) // false
inRange(5.5, 1, 5) // false
处理零值
typescript
import { inRange } from 'radash'
inRange(0, 0, 10) // true
inRange(0, -5, 5) // true
inRange(0, 1, 10) // false
inRange(0, -10, -1) // false
处理相同的最小值和最大值
typescript
import { inRange } from 'radash'
inRange(5, 5, 5) // true
inRange(5, 5, 5, false) // false
inRange(4, 5, 5) // false
inRange(6, 5, 5) // false
处理负范围
typescript
import { inRange } from 'radash'
inRange(-3, -5, -1) // true
inRange(-5, -5, -1) // true
inRange(-1, -5, -1) // true
inRange(-6, -5, -1) // false
inRange(0, -5, -1) // false
处理大数字
typescript
import { inRange } from 'radash'
inRange(1000000, 0, 2000000) // true
inRange(0, 0, 2000000) // true
inRange(2000000, 0, 2000000) // true
inRange(-1, 0, 2000000) // false
inRange(2000001, 0, 2000000) // false
处理浮点数精度
typescript
import { inRange } from 'radash'
inRange(0.1 + 0.2, 0.3, 0.4) // true (0.30000000000000004)
inRange(0.3, 0.3, 0.4) // true
inRange(0.4, 0.3, 0.4) // true
inRange(0.2, 0.3, 0.4) // false
inRange(0.5, 0.3, 0.4) // false
表单验证
typescript
import { inRange } from 'radash'
function validateAge(age: number): boolean {
return inRange(age, 0, 120)
}
function validatePercentage(value: number): boolean {
return inRange(value, 0, 100)
}
function validateTemperature(temp: number): boolean {
return inRange(temp, -273.15, 1000000) // 绝对零度到极高温度
}
validateAge(25) // true
validateAge(-1) // false
validateAge(150) // false
validatePercentage(50) // true
validatePercentage(0) // true
validatePercentage(100) // true
validatePercentage(101) // false
数组索引检查
typescript
import { inRange } from 'radash'
function safeArrayAccess<T>(array: T[], index: number): T | undefined {
if (inRange(index, 0, array.length - 1)) {
return array[index]
}
return undefined
}
const arr = ['a', 'b', 'c', 'd']
safeArrayAccess(arr, 0) // 'a'
safeArrayAccess(arr, 2) // 'c'
safeArrayAccess(arr, 3) // 'd'
safeArrayAccess(arr, -1) // undefined
safeArrayAccess(arr, 4) // undefined
颜色值验证
typescript
import { inRange } from 'radash'
function validateRGB(r: number, g: number, b: number): boolean {
return inRange(r, 0, 255) &&
inRange(g, 0, 255) &&
inRange(b, 0, 255)
}
function validateAlpha(alpha: number): boolean {
return inRange(alpha, 0, 1)
}
validateRGB(255, 128, 0) // true
validateRGB(256, 128, 0) // false
validateRGB(255, -1, 0) // false
validateAlpha(0.5) // true
validateAlpha(0) // true
validateAlpha(1) // true
validateAlpha(1.5) // false
时间验证
typescript
import { inRange } from 'radash'
function validateHour(hour: number): boolean {
return inRange(hour, 0, 23)
}
function validateMinute(minute: number): boolean {
return inRange(minute, 0, 59)
}
function validateSecond(second: number): boolean {
return inRange(second, 0, 59)
}
function validateMonth(month: number): boolean {
return inRange(month, 1, 12)
}
function validateDay(day: number, month: number, year: number): boolean {
const daysInMonth = new Date(year, month, 0).getDate()
return inRange(day, 1, daysInMonth)
}
validateHour(12) // true
validateHour(24) // false
validateMonth(6) // true
validateMonth(13) // false
validateDay(15, 6, 2023) // true (6月有30天)
validateDay(31, 6, 2023) // false
游戏逻辑
typescript
import { inRange } from 'radash'
class Game {
private playerHealth = 100
private playerPosition = { x: 0, y: 0 }
private gameBounds = { width: 800, height: 600 }
takeDamage(damage: number): void {
if (inRange(damage, 0, 100)) {
this.playerHealth = Math.max(0, this.playerHealth - damage)
}
}
movePlayer(dx: number, dy: number): boolean {
const newX = this.playerPosition.x + dx
const newY = this.playerPosition.y + dy
if (inRange(newX, 0, this.gameBounds.width) &&
inRange(newY, 0, this.gameBounds.height)) {
this.playerPosition.x = newX
this.playerPosition.y = newY
return true
}
return false
}
isAlive(): boolean {
return inRange(this.playerHealth, 1, 100)
}
}
注意事项
- 边界包含: 默认包含边界值
- 参数顺序: min 和 max 的顺序不重要
- 浮点数: 正确处理浮点数精度问题
- 性能: 时间复杂度为 O(1)
与其他函数的区别
inRange
: 检查数字是否在范围内clamp
: 将数字限制在范围内random
: 生成范围内的随机数
性能
- 时间复杂度: O(1)
- 空间复杂度: O(1)
- 适用场景: 数值验证、边界检查