我们现在使用的大多数可以用来复制对象或数组的方法基本都属于浅拷贝层次,
对象方面如:
对象的Object.assign()方法
let obj ={
name:"meiqiuu",
info:{
gender:"1"
}
}
let copyObj=Object.assign({},obj)
for...in方法
let copyObj2={}
for(let key in obj){
copyObj2[key]=obj[key]
}
数组方面如:
扩展运算符
let arr=[{order:"1",info:{name:"meiqiuu",age:"2"}]
let copy1=[...arr]
Array.from实现
let copy2 = Array.from(arr)
forEach实现
let copy3 = [];
arr.forEach(v=>copy3.push(v));
map实现
let copy4 = arr.map(v=>v);
深拷贝
JOSN.stringify()/JSON.parse()这种方法可以实现深拷贝 但如果对象中存在函数 就会丢失掉
let obj ={
name:"meiqiuu",
info:{
gender:"1"
},
eat:function(){
return "eat"
}
}
JSON.parse(JSON.stringify(obj))
递归深拷贝 对一个对象中的所有属性进行递归拷贝
function copy(obj) {
var newobj = null;
if (typeof obj === 'object' && obj !== null) {
newobj = obj instanceof Array ? [] : {}
for (const key in obj) {
newobj[key] = copy(obj[key])
}
} else {
newobj = obj
}
return newobj
}
lodash库中的cloneDeep()
浏览器环境
<script src="lodash.js"></script>
Node环境
npm i --save lodash
var lodash = require('lodash');
var objects = [{ 'a': 1 }, { 'b': 2 }];
var deep = lodash.cloneDeep(objects);