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 相关文章推荐
基于jQuery的表格操作插件
Apr 22 Javascript
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
May 13 Javascript
js自定义事件代码说明
Jan 31 Javascript
URL地址中的#符号使用说明
Feb 12 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
Jul 31 Javascript
javascript变量声明实例分析
Apr 25 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
JS打开摄像头并截图上传示例
Feb 18 Javascript
Vue集成Iframe页面的方法示例
Dec 12 Javascript
默认浏览器设置及vue自动打开页面的方法
Sep 21 Javascript
vue.js页面加载执行created,mounted的先后顺序说明
Nov 07 Javascript
JavaScript继承的三种方法实例
May 12 Javascript
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
phpwind中的数据库操作类
2007/01/02 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
php判断两个浮点数是否相等的方法
2015/03/14 PHP
php反序列化长度变化尾部字符串逃逸(0CTF-2016-piapiapia)
2020/02/15 PHP
JS获取DropDownList的value值与text值的示例代码
2014/01/07 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
模拟一个类似百度google的模糊搜索下拉列表
2014/04/15 Javascript
ArtEditor富文本编辑器增加表单提交功能
2016/04/18 Javascript
浅谈jquery之on()绑定事件和off()解除绑定事件
2016/10/26 Javascript
RGB和YUV 多媒体编程基础详细介绍
2016/11/04 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
vue的状态管理模式vuex
2017/11/30 Javascript
JS实现十字坐标跟随鼠标效果
2017/12/25 Javascript
微信小程序数据存储与取值详解
2018/01/30 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
VUE 3D轮播图封装实现方法
2018/07/03 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
JS 实现发送短信验证码的“59秒后重新发送验证短信”功能
2019/08/23 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
2019/09/04 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
Nodejs 微信小程序消息推送的实现
2021/01/20 NodeJs
用Python脚本来删除指定容量以上的文件的教程
2015/05/04 Python
利用pyinstaller或virtualenv将python程序打包详解
2017/03/22 Python
微信公众号token验证失败解决方案
2019/07/22 Python
python 如何利用argparse解析命令行参数
2020/09/11 Python
python函数超时自动退出的实操方法
2020/12/28 Python
Python 将代码转换为可执行文件脱离python环境运行(步骤详解)
2021/01/25 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
瑞贝卡·泰勒官方网站:Rebecca Taylor
2016/09/24 全球购物
初中生期末考试的自我评价
2013/12/17 职场文书
幼儿园保育员责任书
2014/07/22 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
有子女的离婚协议书怎么写(范本)
2014/09/29 职场文书
迎新年主持词
2015/07/06 职场文书
公司保洁员管理制度
2015/08/04 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python