这种方法更加灵活,可以处理更复杂的数据结构,但实现起来相对复杂一些。 function deepClone(obj, hash = new WeakMap()) { if (obj instanceof Date) return new Date(obj); if (obj instanceof RegExp) return new RegExp(obj); if (typeof obj !== 'object' || obj === null) return obj; if ...
第一种方法 // 到时候我们传值到函数里functiondeepClone(obj) {// 我们先判断声明一个对象或数组 如果是数组就是[] 如果不是数组就是{}letobjClone =Array.isArray(obj) ? [] : {}// 判断obj是否是对象 []也是对象objectif(obj &&typeofobj ==="object") {// 我们就循环对象或者数组for(keyinobj)...
通过递归可以简单实现对象的深度克隆,但是这种方法不管是ES6还是ES5实现,都有同样的缺陷,就是只能实现特定的object的深度复制(比如数组和函数),不能实现包装对象Number,String , Boolean,以及Date对象,RegExp对象的复制。 (1)前文的方法 function deepClone(obj){ var newObj= obj instanceof Array?[]:{}; for(v...
return _arr } else if (typeof o === 'object') { var _o = {} for (let key in o) { _o[key] = deepClone(o[key]) } return _o }}var arr = [1, 2, 3, 5]var cloneArr = deepClone(arr)console.log(cloneArr) // --> [ 1, 2, 3, 5 ]console...
因为typeof Array 返回的是objectconsole.log(typeof[])// --> objectvar_arr=[]o.forEach(item=>{_arr.push(item)})return_arr}elseif(typeofo==='object'){var_o={}for(letkeyino){_o[key]=deepClone(o[key])}return_o}}vararr=[1,2,3,5]varcloneArr=deepClone(arr)console.log(clone...
deepClone递归实现 functiondeepClone(target){consttype=getType(target);if(type=="array"||type=="object"){let_clone;// 复杂数据类型 递归实现if(type=="array"){_clone=[];target.forEach((element)=>{_clone.push(deepClone(element));});}else{_clone={};for(constkeyintarget){if(Object.has...
*/deepClone(target){// 定义一个变量letresult;// 如果当前需要深拷贝的是一个对象的话if(typeoftarget==='object'){// 如果是一个数组的话if(Array.isArray(target)){result=[];// 将 result 赋值为一个数组,并且执行遍历for(letiintarget){// 递归克隆数组中的每一项result.push(deepClone(target[i...
if (typeof obj[i] === 'object' && obj[i]!==null) { // 要考虑深复制问题了 if (Array.isArray(obj[i])) { // 这是数组 clone[i] = [] } else { // 这是对象 clone[i] = {} } deepClone(obj[i], clone[i]) } else { ...
letobj={val:2};obj.target=obj;deepClone(obj);// 报错: RangeError: Maximum call stack size exceeded 思路:创建一个 Map ,记录已经被拷贝的对象,遇到已经拷贝的对象,直接返回。 代码语言:javascript 复制 constisObject=(target)=>{return(typeoftarget==='object'||typeoftarget==='function')&&(target...
// 注意,这里判断数组不能用typeof,因为typeof Array 返回的是object console.log(typeof []) // --> object var _arr = [] o.forEach(item => { _arr.push(item) }) return _arr } else if (typeof o === 'object') { var _o = {} for (let key in o) { _o[key] = deepClone...