有一段时间没有更新博客了,忙于工作。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对象深浅拷贝的更多相关文章

  1. jquery侧边折叠导航栏制作,两行代码搞定

    jquery侧边折叠导航栏制作,两行代码搞定 //CSS*{margin: 0;padding: 0} ul{list-style: none} .menu li ul{display: none} ...

  2. 两行代码搞定网站gzip压缩

    网站使用gzip压缩的好处就不用多说了吧,自行脑补,来说一下如何使用nodejs实现gzip压缩,只需要两行代码,so ease. 通过nodejs实现gzip 需要用到的模块 compression ...

  3. AJ学IOS(41)UI之核心动画 两行代码搞定3D转场

    AJ分享,必须精品 效果: 代码: 其实代码很少,苹果都给封装好了 // 1.创建核心动画 CATransition *ca = [CATransition animation]; // 1.1动画过 ...

  4. 两行代码搞定 JavaScript 的日期验证

    我们通常在 JavaScript 中验证日期,基本的思路大概是,先判断年月日是否有效,再判断当月是否有当日,比如一些月份没有 31 日,平年二月没有 29.30 日,闰年二月没有 30 日等等. 偶然 ...

  5. 两行代码搞定UITableView无数据无网络显示-b

    不知是否有像我一样的,每次写TableView在监听网络和无数据源时逻辑处理提示视图都是一堆代码,很繁琐也很重复的垃圾代码(可能就只有我这样

  6. JavaScript的8行代码搞定js文件引入问题

    单页面的操作,免不了会有各种jsp的嵌套问题,一个操作页面里面可能涉及到几十甚至上百个jsp页面. 平常我们对用到的js文件的引入,都会放到index的header里面.如图: 但是,让我们思考三个问 ...

  7. 两行代码搞定Android视图扩散切换效果

    用最简单的方式来实现Android视图扩散切换效果. 一.概述 这两天时间动手撸了个视图扩散切换效果的控制器,API兼容至Android4.0,更方便我们在视图切换过程中有炫酷的过渡效果.本来是想实现 ...

  8. 两行代码搞定UI主流框架

    XCNavTab XCNavTab适用于快速搭建NavigationController和TabBarController相结合的框架 https://github.com/xiaocaiabc/XC ...

  9. 5行js代码搞定导航吸顶效果

    一.HTML布局 首先写HTML布局 <body> <div id="wrap"></div> </body> 二.CSS样式 给点 ...

随机推荐

  1. 【spoj SUBLEX】 Lexicographical Substring Search

    http://www.spoj.com/problems/SUBLEX/ (题目链接) 题意 给出一个字符串,询问其中字典序第K小的子串. Solution 后缀自动机例题. 构出后缀自动机以后,对每 ...

  2. docker attach 和 docker exec

    docker attach docker attach -- Attach to a running container. 常用选项: --sig-proxy=true:Proxy all recei ...

  3. More than one file was found with OS independent path 'META-INF/LICENSE' | Error:Could not read \build\intermediates\typedefs.txt (系统找不到指定的文件。)

    FAQ1: Error:Could not read E:\new\PlatformLibrary\CommonLibrary\build\intermediates\typedefs.txt: E: ...

  4. Android Studio & eclipse 调试技巧

    如上图设置多个断点,开启调试.想跨断点移动到下一个断点,点击如下图1箭头,程序将运行一个断点到下一个断点之间需要执行的代码.如果后面代码没有断点,再次点击该按钮将会执行完程序.点击箭头2指向的按钮,可 ...

  5. CSS3 grayscale滤镜+SVG使图片变黑白实例页面

    CSS代码: .gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale( ...

  6. python之旅:绑定方法与非绑定方法

    一 类中定义的函数分成两大类 一:绑定方法(绑定给谁,谁来调用就自动将它本身当作第一个参数传入): 1. 绑定到类的方法:用classmethod装饰器装饰的方法.                 为 ...

  7. UESTC--1548

    题目:Easy math 原题链接:http://acm.uestc.edu.cn/problem.php?pid=1548 分析:费马小定理的应用. #include<cstdio> # ...

  8. shell 中的流程控制关键字

    if...else if [ $1x == "ab"x ]; then echo "you had enter ab" elif [ $1x == " ...

  9. 300. Longest Increasing Subsequence_算法有误

    300. Longest Increasing Subsequence 300. Longest Increasing Subsequence Given an unsorted array of i ...

  10. 【Asp.net入门11】第一个ASP.NET 应用程序-创建摘要视图

    目前已经完成了应用程序的基本结构单元,受邀者也能够做出回复.这一节将添加一个支持组件,以显示收到的回复摘要,以便用户的朋友了解谁会参加晚会,并做出适当安排.在Solution Explorer中右键单 ...