javascript中json或數組深拷貝解決方法及實例

深拷貝一級(json,數組)

1. 三個點(...)---ES6

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)
複製代碼
相關文章
相關標籤/搜索