1. 数组的克隆
一、 普通一维数组深克隆
let arr = [1,2,3]
(1) for循环遍历数组push
let arr1 = []
for( let i of arr ){
arr1.push(i)
}
console.log(arr1) // [1,2,3]
(2) slice()
let arr1 = arr.slice()
console.log(arr1) // [1,2,3]
(3) concat()
let arr1 = arr.concat()
console.log(arr1) // [1,2,3]
(4) es6 扩展运算符
let arr1 = [...arr]
console.log(arr1) // [1,2,3]
二、任意维数组深克隆
let arr = [[1, 2], [3, 4], { name: 'kobe' }]
1.递归法
function deepClone( o, t={} ){
for( let k in o ) {
if( o.hasOwnProperty(k) ) {
if( o[k] instanceof Object ) {
t[k] = o[k] instanceof Aarray ? [] : {}
deepClone( o[k], t[k] )
}else {
t[k] = o[k]
}
}
}
return t
}
let arr1 = deepClone(arr, [])
arr1[0].push(5)
arr[2].name = 'james'
console.log(arr,arr1) // arr [[1, 2, 5], [3, 4], { name: 'kobe' }]
// arr1 [[1, 2, 5], [3, 4], { name: 'james' }]
2. let arr1 = JSON.parse(JSON.stringify(arr)) // 结果同上
2. 对象的克隆
一.普通对象的深克隆(成员都是原始值类型)
1.for循环遍历
function copyObj(obj) {
let res = {}
for (let key in obj) {
res[key] = obj[key]
}
return res
}
2.扩展运算符
let obj1 = {...obj}
3.Object.assign()
let obj1 = Object.assign({},obj)
二.任意对象的深克隆
1.递归法
function deepClone( o, t={} ){
for( let k in o ) {
if( o.hasOwnProperty(k) ) {
if( o[k] instanceof Object ) {
t[k] = o[k] instanceof Aarray ? [] : {}
deepClone( o[k], t[k] )
}else {
t[k] = o[k]
}
}
}
return t
}
let obj1 = deepClone(obj)
2. let obj1 = JSON.parse(JSON.stringify(obj))