浅拷贝与深拷贝学习
object.assign方法
let arry1=[]
let obj=[1,2,3,4]
// let arry1={}
// let obj={1:2,2:3,3:4,4:5}
Object.assign(arry1,obj)
console.log(arry1)
//返回[1,2,3,4],相当于与复制obj数组(若为对象,则复制对象)
for…in方法
var obj2 = {}
var item={1:2,2:3,3:4,4:5,children:[1,6,3]}
for (let key in item) {
obj2[key] = item[key]
}//相当于obj2复制item
console.log(obj2)//返回{1:2,2:3,3:4,4:5,children:[1,2,3]}
//对其children进行过滤;若有children则遍历item的children,选择项为0,1即为前两项
obj2.children = item.children &&item.children.filter((item, i) => i < 2)
//filter为过滤器,可筛选自己想要的值,只是针对数组【】;
console.log(obj2)//返回{1:2,2:3,3:4,4:5,children:[1,2]}
…展开方法
var item2=[{1:1},{2:2},[{11:11},{22:22}]]
//map方法针对的是二维数组对象、键值对
let obj3=item2.map((k)=>{
return{
...k,
newarry:k[2]//.map(item=>({...item}))
}
})
console.log(obj3)
深拷贝
使用JOSN方法,parse()解析为对象,stringify(),解析为字符串
let arry={
name:"css",
cssdata:{
sex:"女",
age:22
}},
arr1=JSON.parse(JSON.stringify(arry));
console.log(arr1)
}
两者区别
浅拷贝:仅仅是指向被复制的内存地址,如果原地址发生改变,那么浅拷贝出来的对象也会相应的改变。(相当于B引用A,修改A,B跟着变化)
深拷贝:在计算机中开辟一块新的内存地址用于存放复制的对象。(相当于B真正获取对象,变为新的对象,A与B互不影响)