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 }
注意事項
- 字符串解析: 只解析字符串開頭的數字部分
- 浮點數: 會截斷小數部分,不進行四舍五入
- 無效值: 對於無法轉換的值返回默認值
- 類型安全: 提供完整的TypeScript類型支持
- 性能: 轉換操作很快,適合頻繁使用
與其他方法的區別
parseInt()
: 原生方法,對無效值返回NaNNumber()
: 轉換整個字符串,可能返回NaNtoInt()
: radash提供的安全轉換方法
實際應用場景
- 表單處理: 安全轉換用戶輸入
- API處理: 處理可能包含字符串的數字字段
- 數據庫操作: 處理查詢結果中的數字
- 配置解析: 解析配置文件中的數字
- 數據驗證: 驗證和轉換數值輸入