分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 运营维护

两行代码搞定js对象深浅拷贝

发布时间:2023-09-06 01:36责任编辑:苏小强关键词:js

有一段时间没有更新博客了,忙于工作。2018年刚过去,今天来开启2018第一篇博文。好了,咱们步入正题。

先上代码

/** * 遍历对象 * 1.判断是不是原始值 * 2.判断是数组还是对象 * 3.建立相应的数组或对象 * 递归 */var obj={ ???name:"aaa", ???age:23, ???hobby:["basketball","music","coding"], ???lover:{ ???????name:"aaa", ???????age:23, ???????hobby:["sleep","movie","eat"] ???}}var obj1={};function deepCopy(origin,target){ ???var target=target||{};//容错处理 ???????for (var i in origin) { ???????????if(origin.hasOwnProperty(i)){ ?//避免把原型上的属性遍历出来 ???????????????if(typeof origin[i]=="object"){//先判断是引用值 ???????????????????if(origin[i] instanceof Array){//判断是数组 ???????????????????????target[i]=[]; ???????????????????????deepCopy(origin[i],target[i]); ???????????????????}else{ ???????????????????????target[i]={}; //判断是对象 ???????????????????????deepCopy(origin[i],target[i]); ???????????????????} ???????????????}else{//原始值直接赋值 ???????????????????target[i]=origin[i]; ???????????????} ???????} ???} ???return target;//返回拷贝后的对象}deepCopy(obj,obj1);console.log(obj,obj1);

代码解释的很清楚,精简一下代码(核心代码就两行)

function deepCopy(origin,target){ ???for (var i in origin) { ???????var target=target||{}; ???????if(origin.hasOwnProperty(i)){ ???????????//核心代码就两行 ???????????typeof origin[i]=="object"?(origin[i] instanceof Array?deepCopy(origin[i],target[i]=[]):deepCopy(origin[i],target[i]={})):target[i]=origin[i]; ???????} ???} ???return target;}deepCopy(obj,obj1);console.log(obj,obj1);

首先深复制和浅复制只针对像 Object, Array 这样的复杂对象的。简单来说,浅复制只复制一层对象的属性,而深复制则递归复制了所有层级。

新年新气象,祝大家都能在2018年完成自己的小目标。

两行代码搞定js对象深浅拷贝

原文地址:https://www.cnblogs.com/zt123123/p/8283298.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved