web-ui-pack
Version:
Web package with UI elements
43 lines (42 loc) • 1.34 kB
JavaScript
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);
}