function deepClone(obj) {
let hadMapObj=[];
function clone(params) {
let newObj;
if ((typeof(params)).toLowerCase() !== 'object' || params === null || params instanceof Function || params instanceof Date) {
newObj = params;
}
else {
let hadMap = false;
if (hadMapObj.length>=1){
hadMapObj.forEach(function(item) {
if (item.old === params) {
newObj = item.new;
hadMap = true;
}
})
}
if(!hadMap){
newObj = params instanceof Array ? [] : {};
hadMapObj.push({old:params,new:newObj});
for(key in params){
if (params.hasOwnProperty(key)) newObj[key] = clone(params[key]);
}
}
}
return newObj
}
return clone(obj);
}