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处理: 处理可能包含字符串的数字字段
- 数据库操作: 处理查询结果中的数字
- 配置解析: 解析配置文件中的数字
- 数据验证: 验证和转换数值输入