UNPKG

web-ui-pack

Version:
43 lines (42 loc) 1.34 kB
export default function objectClone(obj, opts) { const skipUndefined = opts?.skipUndefined; const skipEmptyObjects = opts?.skipEmptyObjects; function map(vobj) { if (!vobj) { return vobj; } if (Array.isArray(vobj)) { const arr = []; for (let k = 0; k < vobj.length; ++k) { const v = map(vobj[k]); if (!skipUndefined || v !== undefined) { arr.push(v); } } return arr; } const type = typeof vobj; if (type === "function" || vobj instanceof HTMLElement) { return vobj; } if (Object.prototype.toString.call(vobj) === "[object Date]") { return new Date(vobj.valueOf()); } if (type === "object") { const keys = Object.keys(vobj); const r = {}; let hasKey = false; for (let i = 0; i < keys.length; ++i) { const k = keys[i]; const v = map(vobj[k]); if (!skipUndefined || v !== undefined) { r[k] = v; hasKey = true; } } return hasKey || !skipEmptyObjects ? r : undefined; } return vobj; } return map(obj); }