文档章节

js 对象深度克隆

 激进黄瓜酱
发布于 2016/04/29 16:49
字数 218
阅读 21
收藏 0

深度克隆方法

//深度克隆对象
//确定传入参数为对象
function shendu(obj1){
  //如果对象为null 返回null
  if(obj1 == null) return null;
  
  //if(obj1 instanceof Array){
  if(Object.prototype.toString.call(obj1) === '[object Array]'){
    //如果传入数组 初始化数组
    var array = [];
    for (var i = 0; i < obj1.length; i++) {
      if(typeof(obj1[i]) == "object"){
        array[i] = arguments.callee(obj1[i]);
        //array[i] = shendu(obj1[i]);  arguments.callee 标示调用自身 防止方法名变化后 运行失败
      }else {
        array[i] = obj1[i];
      }
    }
    return array;
  }
  //初始化返回对象
  var obj2 = {};
  //遍历传入对象 赋值 如果传入对象有属性也是对象 递归
  for(key in obj1){
    if( typeof(obj1[key]) == "object"){
      obj2[key] = arguments.callee(obj1[key])
    }else {
      obj2[key] = obj1[key];
    }
  }
  return obj2;
}

测试

var oo = {
  ss : "1",
  kk : null,
  pp : {
    yy : "深度对象"
  },
  shuzu : ["q","w","e",{jk:"ooooooooo"}]
}

var  tt = shendu(oo);
console.log("-------------------------------------------");
for(key in oo){
  console.log(key);
  console.log(oo[key]);
}
console.log("-------------------------------------------");
for(key in tt){
  console.log(key);
  console.log(oo[key]);
}


© 著作权归作者所有

上一篇: js 闭包
下一篇: js 对象
粉丝 2
博文 11
码字总数 5088
作品 0
洛阳
私信 提问
Object.assign()

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/assign 说明 Object.assign()方法将所有可枚举属性的值从一个或多个源对象复制到目标对象,然后返...

莫问今朝乄
2017/12/03
0
0
js笔记十七之DOM操作-增删改

DOM的赠删改 增 真是项目中, 我们会在js中动态创建一些html标签, 然后把其增加到页面中 document.createElement 在js中动态创建一个html标签 appendChild 容器.appendChild(新元素) 把当前创...

uplyw
2018/05/11
0
0
JS中的prototype的一些理解

JS中的phototype是JS中比较难理解的一个部分 本文基于下面几个知识点: 1 原型法设计模式 在.Net中可以使用clone()来实现原型法 原型法的主要思想是,现在有1个类A,我想要创建一个类B,这个类是...

Doublec
2015/05/14
60
0
深克隆-Ramda源码中的实现

知识点总结 写一个深克隆的方法,我们需要掌握的知识点 js的数据类型:原始类型,引用类型。 js对象的理解。Date,ExpRep等内置对象的使用。 使用typeof、Object.prototype.toString进行类型...

猎户座小陈
06/28
0
0
原生JS如何实现包含各种类型数据的深克隆

引言 在各个社区查找使用原生js实现深克隆的方法,众说纷纭,大多数实现效果并不理想,在此将各家之言总结一下,得出一个完美的解决方案。 本文参考以下文章,感兴趣者请移步到原文链接。 JS...

九九陈
03/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

刚哥谈架构 (二) 我眼中的架构师

之前在公司,有小伙伴在向别人介绍我的时候,经常会有人这么说:“刚哥是我们的architcture”,如果来人是老外,心中一定是一惊,心中暗叹,“这位匪首看上去貌不惊人,难道已经做到了架构和...

naughty
46分钟前
3
0
OSChina 周日乱弹 —— 别问,问就是没空

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @tom_tdhzz :#今日歌曲推荐# 分享容祖儿/彭羚的单曲《心淡》: 《心淡》- 容祖儿/彭羚 手机党少年们想听歌,请使劲儿戳(这里) @wqp0010 :周...

小小编辑
今天
123
4
golang微服务框架go-micro 入门笔记2.1 micro工具之micro api

micro api micro 功能非常强大,本文将详细阐述micro api 命令行的功能 重要的事情说3次 本文全部代码https://idea.techidea8.com/open/idea.shtml?id=6 本文全部代码https://idea.techidea8....

非正式解决方案
今天
5
0
Spring Context 你真的懂了吗

今天介绍一下大家常见的一个单词 context 应该怎么去理解,正确的理解它有助于我们学习 spring 以及计算机系统中的其他知识。 1. context 是什么 我们经常在编程中见到 context 这个单词,当...

Java知其所以然
昨天
5
0
Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部