浅拷贝与深拷贝学习

浅拷贝与深拷贝学习

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互不影响)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

此人很懒€

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值