UNPKG

mstf-kit

Version:

一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数

83 lines (82 loc) 1.91 kB
function deepClone(obj) { if (obj === null || typeof obj !== "object") { return obj; } if (obj instanceof Date) { return new Date(obj.getTime()); } if (obj instanceof RegExp) { return new RegExp(obj); } if (Array.isArray(obj)) { return obj.map((item) => deepClone(item)); } const cloned = {}; Object.keys(obj).forEach((key) => { cloned[key] = deepClone(obj[key]); }); return cloned; } function get(obj, path, defaultValue) { const keys = Array.isArray(path) ? path : path.split("."); let result = obj; for (const key of keys) { if (result === void 0 || result === null) { return defaultValue; } result = result[key]; } return result === void 0 ? defaultValue : result; } function set(obj, path, value) { const keys = Array.isArray(path) ? path : path.split("."); const lastKey = keys.pop(); let current = obj; for (const key of keys) { if (!(key in current)) { current[key] = {}; } current = current[key]; } current[lastKey] = value; } function pick(obj, keys) { return keys.reduce((result, key) => { if (key in obj) { result[key] = obj[key]; } return result; }, {}); } function omit(obj, keys) { const result = { ...obj }; keys.forEach((key) => delete result[key]); return result; } function merge(...objects) { const isObject = (item) => item !== null && typeof item === "object" && !Array.isArray(item); const result = {}; for (const obj of objects) { for (const key in obj) { const value = obj[key]; if (isObject(value)) { if (isObject(result[key])) { result[key] = merge(result[key], value); } else { result[key] = deepClone(value); } } else if (value !== void 0) { result[key] = deepClone(value); } } } return result; } export { deepClone, get, merge, omit, pick, set };