/** * 深拷贝 */ //判断类型 function isType(arg) { var type = Object.prototype.toString.call(arg); type = (type.slice(8, type.length - 1)).toLowerCase(); return type; } //深拷贝对象 function deepFullCopy(obj) { var typeArr = ['object','null','undefined','array','function']; if(typeArr.indexOf(isType(obj)) < 0){ console.log("不支持拷贝类型,请输入 "+typeArr+" 类型"); return } return (function (obj, newObj) { if (obj === null || obj === undefined) { newObj = obj; return newObj; } if (isType(obj) === 'array') { return deepCopyArr(obj); } for (var key in obj) { if (isType(obj[key]) === 'array') { newObj[key] = deepCopyArr(obj[key]); } else if (isType(obj[key]) === 'object') { newObj[key] = deepFullCopy(obj[key]); } else { newObj[key] = obj[key] } } return newObj; })(obj, {}) } //深拷贝多维数组 function deepCopyArr(arr) { var newObj = []; for (var i = 0; i < arr.length; i++) { if (isType(arr[i]) === 'array') { newObj[i] = deepCopyArr(arr[i]); } if (isType(arr[i]) === 'object') { newObj[i] = deepFullCopy(arr[i]); } else { newObj[i] = arr[i]; } } return newObj; } //测试数据 var objTest = { name: "name", obj: { name: "json", action: function () { return "action" }, val: null }, value: [12, 33, 22], arr: { valueArr: [12, 33, [3333, 3444, 4444]] }, isUndefined: undefined, } var objTest2 = [12, 33, [3333, 3444, 4444]]; var newObj = deepFullCopy(objTest); var newObj2 = deepFullCopy(objTest2);
ES5 深拷贝对象,深拷贝数组
最新推荐文章于 2023-04-01 10:22:23 发布