isArray
检查值是否为数组类型。
语法
typescript
isArray(value: any): value is any[]
参数
value
(any): 要检查的值
返回值
value is any[]
: 类型谓词,如果值为数组则返回 true
示例
基本用法
typescript
import { isArray } from 'radash'
isArray([1, 2, 3]) // true
isArray([]) // true
isArray('hello') // false
isArray(123) // false
isArray({}) // false
isArray(null) // false
isArray(undefined) // false
类型安全
typescript
import { isArray } from 'radash'
const value: unknown = [1, 2, 3]
if (isArray(value)) {
// TypeScript 现在知道 value 是数组
value.push(4) // 类型安全
console.log(value.length) // 可以访问数组属性
}
处理不同类型的值
typescript
import { isArray } from 'radash'
// 数组
isArray([1, 2, 3]) // true
isArray(['a', 'b', 'c']) // true
isArray([{ id: 1 }, { id: 2 }]) // true
isArray([]) // true
// 非数组
isArray('string') // false
isArray(42) // false
isArray(true) // false
isArray(false) // false
isArray(null) // false
isArray(undefined) // false
isArray({}) // false
isArray(() => {}) // false
处理类数组对象
typescript
import { isArray } from 'radash'
// 类数组对象
isArray({ length: 3, 0: 'a', 1: 'b', 2: 'c' }) // false
isArray(document.querySelectorAll('div')) // false
isArray(new Set([1, 2, 3])) // false
isArray(new Map([['a', 1], ['b', 2]])) // false
// 真正的数组
isArray([1, 2, 3]) // true
isArray(Array.from({ length: 3 })) // true
isArray(new Array(3)) // true
处理嵌套数组
typescript
import { isArray } from 'radash'
isArray([[1, 2], [3, 4]]) // true
isArray([[[1]], [[2]]]) // true
isArray([[], []]) // true
isArray([{ items: [1, 2, 3] }]) // true
处理空值
typescript
import { isArray } from 'radash'
isArray(null) // false
isArray(undefined) // false
isArray('') // false
isArray(0) // false
isArray(false) // false
isArray(NaN) // false
处理函数参数
typescript
import { isArray } from 'radash'
function processData(data: unknown) {
if (isArray(data)) {
// 处理数组
return data.map(item => item.toString())
} else {
// 处理非数组
return [data?.toString() || '']
}
}
processData([1, 2, 3]) // ['1', '2', '3']
processData('hello') // ['hello']
processData(null) // ['']
处理API响应
typescript
import { isArray } from 'radash'
async function fetchUsers() {
const response = await fetch('/api/users')
const data = await response.json()
if (isArray(data)) {
return data.map(user => ({
id: user.id,
name: user.name
}))
} else {
throw new Error('Expected array of users')
}
}
处理表单数据
typescript
import { isArray } from 'radash'
function validateFormData(data: unknown) {
if (!isArray(data)) {
throw new Error('Form data must be an array')
}
return data.filter(item =>
item && typeof item === 'object' && 'name' in item
)
}
const formData = [
{ name: 'firstName', value: 'Alice' },
{ name: 'lastName', value: 'Smith' }
]
const validData = validateFormData(formData)
// [{ name: 'firstName', value: 'Alice' }, { name: 'lastName', value: 'Smith' }]
处理配置对象
typescript
import { isArray } from 'radash'
interface Config {
features?: unknown
users?: unknown
}
function processConfig(config: Config) {
const features = isArray(config.features) ? config.features : []
const users = isArray(config.users) ? config.users : []
return {
features: features.map(f => f.toString()),
users: users.map(u => ({ ...u, id: u.id || Date.now() }))
}
}
const config = {
features: ['search', 'filter'],
users: [{ name: 'Alice' }, { name: 'Bob' }]
}
const processed = processConfig(config)
// { features: ['search', 'filter'], users: [{ name: 'Alice', id: 1234567890 }, { name: 'Bob', id: 1234567891 }] }
处理递归检查
typescript
import { isArray } from 'radash'
function flattenArray(arr: unknown[]): unknown[] {
const result: unknown[] = []
for (const item of arr) {
if (isArray(item)) {
result.push(...flattenArray(item))
} else {
result.push(item)
}
}
return result
}
const nested = [1, [2, 3], [4, [5, 6]]]
const flattened = flattenArray(nested)
// [1, 2, 3, 4, 5, 6]
处理类型守卫
typescript
import { isArray } from 'radash'
function isStringArray(value: unknown): value is string[] {
return isArray(value) && value.every(item => typeof item === 'string')
}
function isNumberArray(value: unknown): value is number[] {
return isArray(value) && value.every(item => typeof item === 'number')
}
const stringArray = ['a', 'b', 'c']
const numberArray = [1, 2, 3]
const mixedArray = [1, 'a', true]
isStringArray(stringArray) // true
isNumberArray(numberArray) // true
isStringArray(numberArray) // false
isNumberArray(mixedArray) // false
注意事项
- 类型安全: 提供 TypeScript 类型谓词
- 性能: 比 instanceof Array 更可靠
- 跨域: 在不同 iframe 间也能正确工作
- 空值: 正确处理 null 和 undefined
与其他函数的区别
isArray
: 检查是否为数组Array.isArray
: 原生方法,功能相同instanceof Array
: 可能在不同 iframe 间失效typeof
: 无法区分数组和对象
性能
- 时间复杂度: O(1)
- 空间复杂度: O(1)
- 适用场景: 类型检查、数据验证