js 数据拷贝的几种方式
js 数据拷贝的几种方式
- JSON.parse(JSON.stringify(obj))
- Object.assign({},obj)
- _.cloneDeep(obj1)
- {…obj }
let obj = {
a:1,
b:{
m:2
},
c:[1,1,1],
d:null,
e:()=>{
return 1
},
f:undefined
}
let obj1 = JSON.parse(JSON.stringify(obj))
let obj2 = Object.assign({},obj)
let obj3 = _.cloneDeep(obj1)//lodash.cloneDeep()
let obj4 = {...obj }
obj.a = 0
obj.b.m= 333
obj.c = [0]
obj.d = ''
obj.f = 4
console.log('obj',obj)
console.log('JSON.parse',obj1)
console.log('Object.assign',obj2)
console.log('_.cloneDeep',obj3)
console.log('...obj',obj4)
打印结果:
总结:
一般情况推荐使用:Object.assign,{…obj } 这两种方式
如果对象仅内包含嵌套对象 可以使用JSON.parse(JSON.stringify(obj)),_.cloneDeep(obj1) 这两种方式
如果对象内包含函数或其他复杂对象,使用以下方法:
deepClone(obj) {
var result = Array.isArray(obj) ? [] : {}
for (let key in obj) {
if (obj[key] && typeof obj[key] === 'object') {
result[key] = this.deepClone(obj[key])
} else {
result[key] = obj[key]
}
}
return result
},
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!