Skip to content

toInt

將值轉換為整數,如果轉換失敗則返回默認值。

基礎用法

typescript
import { toInt } from 'radash'

console.log(toInt('123'))        // 123
console.log(toInt('123.45'))     // 123
console.log(toInt('abc', 0))     // 0
console.log(toInt(null, 1))      // 1

語法

typescript
function toInt(
  value: any,
  fallback?: number
): number

參數

  • value (any): 要轉換的值
  • fallback (number, 可選): 轉換失敗時的默認值,默認為0

返回值

返回轉換後的整數。如果轉換失敗,返回默認值。

示例

基本轉換

typescript
import { toInt } from 'radash'

console.log(toInt('123'))        // 123
console.log(toInt('123.45'))     // 123
console.log(toInt('0'))          // 0
console.log(toInt('-123'))       // -123
console.log(toInt('123abc'))     // 123

處理無效值

typescript
import { toInt } from 'radash'

console.log(toInt('abc'))        // 0 (默認值)
console.log(toInt('abc', 1))     // 1 (自定義默認值)
console.log(toInt(null))         // 0
console.log(toInt(undefined))    // 0
console.log(toInt(''))           // 0
console.log(toInt('   '))        // 0

處理數字類型

typescript
import { toInt } from 'radash'

console.log(toInt(123))          // 123
console.log(toInt(123.45))       // 123
console.log(toInt(0))            // 0
console.log(toInt(-123))         // -123
console.log(toInt(Infinity))     // 0
console.log(toInt(-Infinity))    // 0
console.log(toInt(NaN))          // 0

處理布爾值

typescript
import { toInt } from 'radash'

console.log(toInt(true))         // 1
console.log(toInt(false))        // 0
console.log(toInt('true'))       // 0 (字符串'true'不是有效數字)
console.log(toInt('false'))      // 0

處理數組和對象

typescript
import { toInt } from 'radash'

console.log(toInt([]))           // 0
console.log(toInt([1, 2, 3]))   // 0
console.log(toInt({}))           // 0
console.log(toInt({ key: 123 })) // 0
console.log(toInt(() => {}))     // 0

處理特殊字符串

typescript
import { toInt } from 'radash'

console.log(toInt('123.45'))     // 123
console.log(toInt('123abc'))     // 123
console.log(toInt('abc123'))     // 0
console.log(toInt('123abc456'))  // 123
console.log(toInt('0x1A'))       // 0 (十六進制字符串)
console.log(toInt('1e2'))        // 100 (科學計數法)

在表單處理中使用

typescript
import { toInt } from 'radash'

function processFormData(formData: FormData) {
  const age = toInt(formData.get('age'), 18)
  const score = toInt(formData.get('score'), 0)
  const count = toInt(formData.get('count'), 1)
  
  return { age, score, count }
}

// 模擬表單數據
const mockFormData = new FormData()
mockFormData.append('age', '25')
mockFormData.append('score', '85.5')
mockFormData.append('count', 'abc')

const result = processFormData(mockFormData)
console.log(result) // { age: 25, score: 85, count: 1 }

處理API響應

typescript
import { toInt } from 'radash'

function processApiResponse(response: any) {
  return {
    id: toInt(response.id, 0),
    count: toInt(response.count, 0),
    rating: toInt(response.rating, 5),
    price: toInt(response.price, 0)
  }
}

const apiResponse = {
  id: '123',
  count: '45.67',
  rating: 'invalid',
  price: null
}

const processed = processApiResponse(apiResponse)
console.log(processed) // { id: 123, count: 45, rating: 5, price: 0 }

處理配置數據

typescript
import { toInt } from 'radash'

function parseConfig(config: Record<string, any>) {
  return {
    port: toInt(config.port, 3000),
    timeout: toInt(config.timeout, 5000),
    maxConnections: toInt(config.maxConnections, 100),
    retryCount: toInt(config.retryCount, 3)
  }
}

const config = {
  port: '8080',
  timeout: 'invalid',
  maxConnections: '50.5',
  retryCount: null
}

const parsed = parseConfig(config)
console.log(parsed) // { port: 8080, timeout: 5000, maxConnections: 50, retryCount: 3 }

處理用戶輸入

typescript
import { toInt } from 'radash'

function validateUserInput(input: string, min: number, max: number) {
  const value = toInt(input, min)
  
  if (value < min) {
    return { valid: false, value: min, message: `Value must be at least ${min}` }
  }
  
  if (value > max) {
    return { valid: false, value: max, message: `Value must be at most ${max}` }
  }
  
  return { valid: true, value, message: 'Valid input' }
}

console.log(validateUserInput('25', 0, 100))    // { valid: true, value: 25, message: 'Valid input' }
console.log(validateUserInput('abc', 0, 100))   // { valid: false, value: 0, message: 'Value must be at least 0' }
console.log(validateUserInput('150', 0, 100))   // { valid: false, value: 100, message: 'Value must be at most 100' }

處理數據庫查詢結果

typescript
import { toInt } from 'radash'

function processDatabaseResult(result: any) {
  return {
    userId: toInt(result.user_id, 0),
    score: toInt(result.score, 0),
    attempts: toInt(result.attempts, 1),
    level: toInt(result.level, 1)
  }
}

const dbResult = {
  user_id: '123',
  score: '85.5',
  attempts: 'invalid',
  level: null
}

const processed = processDatabaseResult(dbResult)
console.log(processed) // { userId: 123, score: 85, attempts: 1, level: 1 }

處理CSV數據

typescript
import { toInt } from 'radash'

function parseCSVRow(row: string[]) {
  return {
    id: toInt(row[0], 0),
    age: toInt(row[1], 0),
    score: toInt(row[2], 0),
    rank: toInt(row[3], 1)
  }
}

const csvRow = ['123', '25.5', '85.67', 'invalid']
const parsed = parseCSVRow(csvRow)
console.log(parsed) // { id: 123, age: 25, score: 85, rank: 1 }

處理數學計算

typescript
import { toInt } from 'radash'

function calculateAverage(values: any[]) {
  const validNumbers = values
    .map(val => toInt(val, null))
    .filter(val => val !== null)
  
  if (validNumbers.length === 0) {
    return 0
  }
  
  const sum = validNumbers.reduce((acc, val) => acc + val, 0)
  return Math.round(sum / validNumbers.length)
}

const values = ['10', '20.5', 'invalid', '30', null, '40.7']
const average = calculateAverage(values)
console.log(average) // 20 (10 + 20 + 30 + 40 = 100, 100 / 4 = 25, 四舍五入為20)

處理分頁參數

typescript
import { toInt } from 'radash'

function parsePaginationParams(params: Record<string, any>) {
  return {
    page: toInt(params.page, 1),
    limit: toInt(params.limit, 10),
    offset: toInt(params.offset, 0)
  }
}

const params = {
  page: '2',
  limit: '25.5',
  offset: 'invalid'
}

const pagination = parsePaginationParams(params)
console.log(pagination) // { page: 2, limit: 25, offset: 0 }

處理游戲數據

typescript
import { toInt } from 'radash'

function processGameData(data: any) {
  return {
    level: toInt(data.level, 1),
    score: toInt(data.score, 0),
    lives: toInt(data.lives, 3),
    coins: toInt(data.coins, 0)
  }
}

const gameData = {
  level: '5.5',
  score: '1250.75',
  lives: 'invalid',
  coins: null
}

const processed = processGameData(gameData)
console.log(processed) // { level: 5, score: 1250, lives: 3, coins: 0 }

注意事項

  1. 字符串解析: 只解析字符串開頭的數字部分
  2. 浮點數: 會截斷小數部分,不進行四舍五入
  3. 無效值: 對於無法轉換的值返回默認值
  4. 類型安全: 提供完整的TypeScript類型支持
  5. 性能: 轉換操作很快,適合頻繁使用

與其他方法的區別

  • parseInt(): 原生方法,對無效值返回NaN
  • Number(): 轉換整個字符串,可能返回NaN
  • toInt(): radash提供的安全轉換方法

實際應用場景

  1. 表單處理: 安全轉換用戶輸入
  2. API處理: 處理可能包含字符串的數字字段
  3. 數據庫操作: 處理查詢結果中的數字
  4. 配置解析: 解析配置文件中的數字
  5. 數據驗證: 驗證和轉換數值輸入

Released under the MIT License.