时新闻
es6数组去重的方法(es6对象转数组)  二套房首付四成政策半年未落地 被指仅为理论可行  hp126a打印机驱动(惠普m126a打印机加墨教程)步骤  联想k5pro价格多少钱(联想手机全部机型)  美媒:习近平访美之际中国对美投资创历史最高  如何网购商品(新手网上购物的步骤)步骤  新书披露习近平治县观 6文稿首次公开  中纪委:警惕广告背后奢靡风 一些干部仍存逆反心理  java查看变量类型的方法(将日期从string转成date)步  速卖通买家注册流程(注册速卖通邮箱要求) 
  您当前的位置 :主页 > 新闻 > 资讯 > es6数组去重的方法(es6对象转数组)

es6数组去重的方法(es6对象转数组)

 作者:都市小编     宿州新闻:www.ds0557.cn    2022-03-26 16:31

面试时候有面试官问到ES6的解构赋值是深拷贝还是浅拷贝?,这里做一个总结.

ES6的解构赋值,大家应该都清楚,就是可以快速取出数组或者对象中的值;我们先来看一个使用案例:ES6的解构赋值是深拷贝还是浅拷贝?

解构赋值

更多的解构赋值知识可以查看:

https://es6.ruanyifeng.com/#docs/destructuring

那么,ES6的解构赋值到底是深拷贝还是浅拷贝呢?

我们先来看一下深拷贝和浅拷贝的定义

深拷贝:修改新变量的值不会影响原有变量的值。默认情况下基本数据类型(number,string,null,undefined,boolean)都是深拷贝。

浅拷贝:修改新变量的值会影响原有的变量的值。默认情况下引用类型(object)都是浅拷贝。

我们先开看一个基本类型,直接用等号赋值的例子

let user = 'siri'let stu = userstu = 'jack'console.log('输出:',stu)// 输出:jackconsole.log('输出:',user)// 输出:siri

由上方的例子可以知道:
stu的数值改变并不会影响user ,所以基本数据类型,直接用等号赋值,也都是深拷贝;

我们再看一个引用类型,直接用等号赋值的例子let obj1 = { name:'siri', age:18}let obj2 = obj1obj2.name = 'jack'console.log('obj1',obj1)console.log('obj2',obj2)// obj1 {name: "jack", age: 18}// obj2 {name: "jack", age: 18}ES6的解构赋值是深拷贝还是浅拷贝?

上方例子中我们可以看到,obj1赋值给obj2,然后改变obj2中的name值,发现obj2中的name也跟随着改变了,所以是浅拷贝。(因为他们引用的是同一个地址的数据!拷贝的时候并没有给obj2创造独立的内存,只是把obj1指向数据的 指针 拷贝给了obj2)

上方的例子了解了之后 我们再回到解构赋值

修改最上方的解构赋值代码,给name 和 age赋值

const userInfo = { name:'siri', age:18}let {name,age} = userInfoname = 'jack'age = 16console.log('打印userInfo',userInfo)// 打印userInfo {name: "siri", age: 18}

我们发现userInfo 的数据并没有被改变,有同学会说,解构赋值好像是深拷贝啊?????ES6的解构赋值是深拷贝还是浅拷贝?

image.png

我们再修改一下代码看看const userInfo = { name:'siri', age:18, detail:{ qq:'1', email:'1366666@163.com' }}let {name,age,detail} = userInfoname = 'jack'age = 16detail.qq = "2"console.log('打印userInfo',userInfo)

打印信息:

ES6的解构赋值是深拷贝还是浅拷贝?

发现解构赋值出来的对象将原对象detail中的qq的数据修改了,这样看还是浅拷贝;

总结:解构赋值,如果所解构的原对象是一维数组或对象,其本质就是对基本数据类型进行等号赋值,那它就是深拷贝;如果是多维数组或对象,其本质就是对引用类型数据进项等号赋值,那它就是浅拷贝;

结论:解构赋值是浅拷贝(因为它确实不能对多维数组或对象达到深拷贝的作用);

深拷贝的实现方法

本质还是将对象拆开为基本数据类型进行赋值。

function deepClone(source){ const targetObj = source.constructor === Array ? [] : {}; // 判断复制的目标是数组还是对象 for(let keys in source){ // 遍历目标 if(source.hasOwnProperty(keys)){ if(source[keys] && typeof source[keys] === 'object'){ // 如果值是对象,就递归一下 targetObj[keys] = source[keys].constructor === Array ? [] : {}; targetObj[keys] = deepClone(source[keys]); }else{ // 如果不是,就直接赋值 targetObj[keys] = source[keys]; } } } return targetObj;}

  视觉焦点

24小时新闻排行

 

国内万象

 
· 联想k5pro价格多少钱(联想手机全部机型)
· 速卖通买家注册流程(注册速卖通邮箱要求)
· 免费赚佣金平台(正规推广赚佣金的平台介绍)
· 少儿口才加盟品牌哪个好(少儿口才培训机构排名
· java高级程序员的要求(架构师需要掌握的知识)
· 苹果ibooks什么格式(苹果ipad型号大全)

图片新闻

 

生活消费

 
· spss软件怎么用例子(spss入门基本用法)
· 游戏制作指南怎么写(自己开发游戏软件的注意事
· 多个平台封禁薇娅账号(直播一姐彻底凉凉)
· 小吃连锁店十大品牌(连锁小吃加盟店排行榜)
· 全网公认排名第一的赚钱软件(正规挣钱最快的游
· 阿里验证码识别(阿里云账号注册步骤)

地方新闻

 
· 埇桥区系列专场招聘活动送岗到家门
· 埇桥区文明村镇创建稳扎稳打
· 埇桥区妇联开展系列活动庆“三八”
· 埇桥警方守护平安亮出“成绩单”
· 埇桥区司法局武姗姗获评全国“三下乡”活动服务
· 宿州开展服务业发展调研活

国内时评

 
黑龙江法制频道疑发生直播事故
  【黑龙江法制频道疑发生直播事故】11月25日,网曝黑龙...[详细]
· 凉山州西昌市粮油收储库财会科科长彭志杰被查(简历)
· 安徽省人社厅网站频频被假冒 还能网上查证
· 淘宝客服几点上班(淘宝客服是24小时在线吗)
· 商标侵权怎么处理(商标侵权一般罚款多少)
· 加盟一个零食店多少钱(零食店加盟费一般多少)
· 互联网产品如何运营推广(互联网产品运营是做什么的
严格遵守保密法律法规,严禁在互联网发布涉密信息。