deepCopy
function deepCopy(obj, mapFn) {
const newobj = Array.isArray(obj) ? [] : {};
const type = new Set([
"number",
"string",
"boolean",
"function",
undefined,
null,
]);
for (let key in obj) {
if (obj.hasOwnProperty(key)) {
if (type.has(typeof obj[key]) || type.has(obj[key])) {
newobj[key] = obj[key];
} else {
newobj[key] = deepCopy(obj[key], mapFn);
}
if (mapFn) {
newobj[key] = mapFn(newobj[key], key, obj);
}
}
}
return newobj;
}