mstf-kit
Version:
一个现代化的 JavaScript/TypeScript 工具库,提供了丰富的常用工具函数
83 lines (82 loc) • 1.91 kB
JavaScript
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
};