JS对象的深度克隆方法示例


Posted in Javascript onMarch 16, 2017

本文实例讲述了JS对象的深度克隆方法。分享给大家供大家参考,具体如下:

js中创建的对象指向内存,所以在开发过程中,往往修改了一个对象的属性,会影响另外一个对象。

尤其是在angular框架中,dom是由数据驱动的,在增删改查对象的操作中,对象属性的继承关系是很让人头痛的!

我之前遇到的问题就是,在编辑页面,操作了对象数据,影响到了展示数据的展现!

我整理了两种深度克隆对象的方法,供大家参考!

首先var 一个假数据

var schedule = {"status":21,"msg":"ok","data":[{"name":"lemon","age":21,"contactList":{"phone":[152,153,154],"email":5295}},{"name":"lara","age":22,"contact":{"phone":152,"email":5295}}]}

方法1:

遍历自身,判断当前对象是obj还是list,克隆出新对象

function deepClone(obj)
{
  var o,i,j,k;
  if(typeof(obj)!="object" || obj===null)return obj;
  if(obj instanceof(Array))
  {
    o=[];
    i=0;j=obj.length;
    for(;i<j;i++)
    {
      if(typeof(obj[i])=="object" && obj[i]!=null)
      {
        o[i]=arguments.callee(obj[i]);
      }
      else
      {
        o[i]=obj[i];
      }
    }
  }
  else
  {
    o={};
    for(i in obj)
    {
      if(typeof(obj[i])=="object" && obj[i]!=null)
      {
        o[i]=arguments.callee(obj[i]);
      }
      else
      {
        o[i]=obj[i];
      }
    }
  }
  return o;
}
var scheduleClone = deepClone(schedule)
scheduleClone.data[0].contactList.phone[0] = 99999999999
console.log('方法1 深度克隆')
console.log(scheduleClone)
console.log(JSON.stringify(schedule))
console.log(JSON.stringify(scheduleClone))

方法2:

用js原生的json序列化的方式,简单粗暴!

var scheduleClone2 = JSON.parse(JSON.stringify(schedule));
console.log('方法2 深度克隆')
console.log(scheduleClone2)
scheduleClone2.data[0].contactList.phone[0] = 8888888
console.log(JSON.stringify(schedule))
console.log(JSON.stringify(scheduleClone2))

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
javascript获取select的当前值示例代码(兼容IE/Firefox/Opera/Chrome)
Dec 17 Javascript
js实现的GridView即表头固定表体有滚动条且可滚动
Feb 19 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
AnjularJS中$scope和$rootScope的区别小结
Sep 18 Javascript
JS实现给对象动态添加属性的方法
Jan 05 Javascript
利用JS做网页特效_大图轮播(实例讲解)
Aug 09 Javascript
React Native中Mobx的使用方法详解
Dec 04 Javascript
Vue开发之封装分页组件与使用示例
Apr 25 Javascript
vue-cli+iview项目打包上线之后图标不显示问题及解决方法
Oct 16 Javascript
js实现GIF图片的分解和合成
Oct 24 Javascript
如何基于jQuery实现五角星评分
Sep 02 jQuery
vuex Module将 store 分割成模块的操作
Dec 07 Vue.js
JS对象深度克隆实例分析
Mar 16 #Javascript
JS异步加载的三种实现方式
Mar 16 #Javascript
Bootstrap免费字体和图标网站(值得收藏)
Mar 16 #Javascript
基于JavaScript实现滑动门效果
Mar 16 #Javascript
基于Vue2.0的分页组件
Mar 16 #Javascript
原生js实现验证码功能
Mar 16 #Javascript
基于vue实现多引擎搜索及关键字提示
Mar 16 #Javascript
You might like
PHP基础陷阱题(变量赋值)
2012/09/12 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
基于php实现的验证码小程序
2016/12/13 PHP
Laravel自动生成UUID,从建表到使用详解
2019/10/24 PHP
对JavaScript的eval()中使用函数的进一步讨论
2008/07/26 Javascript
jQuery 技巧大全(新手入门篇)
2009/05/12 Javascript
JavaScript动态改变HTML页面元素例如添加或删除
2014/08/10 Javascript
使用mouse事件实现简单的鼠标经过特效
2015/01/30 Javascript
js实现向右横向滑出的二级菜单效果
2015/08/27 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
关于Vue在ie10下空白页的debug小结
2018/05/02 Javascript
使用electron制作满屏心特效的示例代码
2018/11/27 Javascript
详解微信图片防盗链“此图片来自微信公众平台 未经允许不得引用”的解决方案
2019/04/04 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
解决layui的form里的元素进行动态生成,验证失效的问题
2019/09/14 Javascript
vue实现图片按比例缩放问题操作
2020/08/11 Javascript
[04:39]显微镜下的DOTA2第十三期—Pis卡尔个人秀
2014/04/04 DOTA
在Python中关于中文编码问题的处理建议
2015/04/08 Python
python发送告警邮件脚本
2018/09/17 Python
Python图像处理之图像的缩放、旋转与翻转实现方法示例
2019/01/04 Python
Python中正则表达式的用法总结
2019/02/22 Python
python数据类型之间怎么转换技巧分享
2019/08/20 Python
浅谈pandas.cut与pandas.qcut的使用方法及区别
2020/03/03 Python
keras的siamese(孪生网络)实现案例
2020/06/12 Python
爱尔兰最大的体育零售商:Life Style Sports
2019/06/12 全球购物
英国领先的在线高尔夫设备零售商:Golfgeardirect
2020/12/11 全球购物
自1926年以来就为冰岛保持温暖:66°North
2020/11/27 全球购物
西部世纪.net笔试题面试题
2014/04/03 面试题
汽车销售顾问求职自荐信
2014/01/01 职场文书
企业授权委托书范本
2014/04/02 职场文书
政府四风问题整改措施
2014/10/04 职场文书
中班上学期个人总结
2015/02/12 职场文书
迎客户欢迎词三篇
2019/09/27 职场文书
Python常用配置文件ini、json、yaml读写总结
2021/07/09 Python