javascript中json或陣列深拷貝解決方法及例項
摘要:
let arr = { a:1, b:2 }
let arr2 = { ...arr }
arr.a = 1111
console.log(arr,arr2)
複製程式碼
2. Ojbect.assign(目標物件,源物件)--ES6
let arr = { a:1, b:2 }...
let arr = { a:1, b:2 } let arr2 = { ...arr } arr.a = 1111 console.log(arr,arr2) 複製程式碼
2. Ojbect.assign(目標物件,源物件)--ES6
let arr = { a:1, b:2 } let arr2 = Object.assign({},arr) arr.a = 1111 console.log(arr,arr2) 複製程式碼
深拷貝多級(json,陣列)包含只有一級
1.簡單直接點的 JSON.parse(JSON.stringify(物件))
let arr = { a: { age: 12 }, b:2 } let arr2 = JSON.parse(JSON.stringify(arr)) arr.a.age = 18 console.log(arr,arr2) 複製程式碼
2.自定義一個函式實現深度拷貝
function copy(obj){ /** 只需要三步就ok 第一步: 使用typeof判斷obj是否是一個物件 第二步: 初始化一個新的物件(使用obj.constructor判斷是陣列還是json) 第三步: 遍歷物件 將每一個元素是基本資料型別的賦值給新的物件,否則遞迴此方法 */ if(typeof obj !== 'object'){ return } let newobj = obj.constructor === Array ? [] : {} for(let i in obj){ newobj[i] = typeof obj[i] === 'object' ? copy(obj[i]) : obj[i] } return newobj } let arr = { a: { age: 12 }, b:2 } let arr2 = copy(arr) arr.a.age = 18 console.log(arr,arr2) 複製程式碼
3. 使用eval()函式
let arr = { a: { age: 12 }, b:2 } let arr2 = eval("("+JSON.stringify(arr)+")") arr.a.age = 18 console.log(arr,arr2) 複製程式碼