Skip to content

对象操作

介绍

使用 CatObject 类或 o() 工厂函数进行对象操作,支持键值遍历、属性挑选/忽略、继承与合并等常用操作。

快速使用

typescript
import { o } from '@cat-kit/core'

const user = { id: 1, name: 'Alice', age: 25, email: 'alice@example.com' }

const obj = o(user)

// 获取所有键
obj.keys() // ['id', 'name', 'age', 'email']

// 挑选属性
const picked = obj.pick(['id', 'name'])
// { id: 1, name: 'Alice' }

// 忽略属性
const omitted = obj.omit(['age', 'email'])
// { id: 1, name: 'Alice' }

API参考

基本用法

typescript
import { o } from '@cat-kit/core'

const user = { id: 1, name: 'Alice', age: 25, email: 'alice@example.com' }

const obj = o(user)

// 获取所有键
obj.keys() // ['id', 'name', 'age', 'email']

// 遍历对象
obj.each((key, value) => {
  console.log(`${key}: ${value}`)
})

// 挑选属性
const picked = obj.pick(['id', 'name'])
// { id: 1, name: 'Alice' }

// 忽略属性
const omitted = obj.omit(['age', 'email'])
// { id: 1, name: 'Alice' }

对象继承

typescript
import { o } from '@cat-kit/core'

const defaults = { theme: 'light', fontSize: 14, language: 'zh-CN' }

const userSettings = { theme: 'dark', fontSize: 16 }

// 从 userSettings 继承属性(只继承已存在的属性)
o(defaults).extend(userSettings)
// { theme: 'dark', fontSize: 16, language: 'zh-CN' }

深度继承

typescript
import { o } from '@cat-kit/core'

const defaults = { ui: { theme: 'light', fontSize: 14 }, data: { cache: true } }

const userConfig = { ui: { theme: 'dark' } }

// 深度继承
o(defaults).deepExtend(userConfig)
// { ui: { theme: 'dark', fontSize: 14 }, data: { cache: true } }

对象操作

typescript
import { o } from '@cat-kit/core'

const obj = o({ a: 1, b: 2, c: 3 })

// 结构化拷贝
const copied = obj.copy()

// 合并对象
const merged = obj.merge({ d: 4, e: 5 })
// { a: 1, b: 2, c: 3, d: 4, e: 5 }

综合示例

typescript
import { o, isString, isNumber, isEmpty } from '@cat-kit/core'

interface FormData {
  name: string
  age: number
  email: string
  phone?: string
}

function validateForm(data: Partial<FormData>): boolean {
  const required = o(data).pick(['name', 'age', 'email'])

  // 检查必填项
  for (const [key, value] of Object.entries(required)) {
    if (isEmpty(value)) {
      console.error(`${key} 不能为空`)
      return false
    }
  }

  // 类型验证
  if (!isString(data.name)) {
    console.error('name 必须是字符串')
    return false
  }

  if (!isNumber(data.age) || data.age < 0 || data.age > 150) {
    console.error('age 必须是有效的数字')
    return false
  }

  return true
}

基于 MIT 许可发布