// 优雅实现对象操作工具函数集合 /** * 深拷贝对象或数组 * @param input 需要深拷贝的对象或数组 * @returns 深拷贝后的新对象/数组 */ export function deepClone(input: T): T { if (input === null || typeof input !== 'object') return input; if (Array.isArray(input)) return input.map(deepClone) as unknown as T; const result = {} as T; for (const key in input) { if (Object.prototype.hasOwnProperty.call(input, key)) { result[key] = deepClone(input[key]); } } return result; } /** * 合并多个对象 * @param objects 需要合并的对象列表 * @returns 合并后的对象 */ export function mergeObjects(...objects: Partial[]): T { return objects.reduce((acc: Partial, obj) => { for (const key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { if (typeof acc[key] === 'object' && typeof obj[key] === 'object') { acc[key] = mergeObjects(acc[key], obj[key]); } else { acc[key] = obj[key]; } } } return acc; }, {} as Partial) as T; } /** * 获取嵌套对象的属性值 * @param obj 待操作对象 * @param path 属性路径(以点分隔) * @param defaultValue 默认值 * @returns 属性值或默认值 */ export function getNestedValue(obj: T, path: string, defaultValue: U): U | unknown { return path.split('.').reduce((acc: any, key: string) => acc && acc[key], obj) ?? defaultValue; } /** * 判断对象是否为空 * @param obj 待检查对象 * @returns 是否为空对象 */ export function isEmptyObject(obj: Record): boolean { return Object.keys(obj).length === 0; }