Skip to content

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)
  }
}

注意事项

  1. 边界包含: 默认包含边界值
  2. 参数顺序: min 和 max 的顺序不重要
  3. 浮点数: 正确处理浮点数精度问题
  4. 性能: 时间复杂度为 O(1)

与其他函数的区别

  • inRange: 检查数字是否在范围内
  • clamp: 将数字限制在范围内
  • random: 生成范围内的随机数

性能

  • 时间复杂度: O(1)
  • 空间复杂度: O(1)
  • 适用场景: 数值验证、边界检查

Released under the MIT License.