复杂对象转变为简单对象

再说这个之前与要先了解一下深拷贝:
首先深拷贝和浅拷贝只针对像 Object, Array 这样的复杂对象的。简单来说,浅拷贝只复制一层对象的属性,而深拷贝则递归拷贝了所有层级,如下:

 var china = {
        nation : '中国',
        birthplaces:['北京','上海','广州'],
        skincolr :'yellow',
        friends:['sk','ls']
      }
      //深复制,要想达到深复制就需要用递归
      function deepCopy(o,c){
        var c = c || {}
        for(var i in o){
        if(typeof o[i] === 'object'){
                  //要考虑深复制问题了
                      if(o[i].constructor === Array){
                        //这是数组
                        c[i] =[]
                    }else{
                        //这是对象
                        c[i] = {}
                    }
                    deepCopy(o[i],c[i])
               }else{
                 c[i] = o[i]
               }
           }
           return c
      }

而如何转化为简单对象呢?如下:

var arr = {a:1,b:2,g:{c:8,d:5},p:[{q:1,w:2},{q:2,w:3}]};
    var array = [];
    function deepCopy(p,c,index) {
        var flag = false;
        if (p.constructor === Array) {
            flag = true;
        };
    for (var i in p) {
      if (typeof p[i] === 'object') {
        if(flag){
                    deepCopy(p[i],array,i);
                }else{ 
                    deepCopy(p[i],array,index);
                }
      } else {
                if(index){
                c[i+'['+index+']'] = p[i];
                }else{
                    c[i] = p[i];
                }
      }
    }
    return c;
  }
    console.log(deepCopy(arr,array))
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.ios高性能编程 (1).内层 最小的内层平均值和峰值(2).耗电量 高效的算法和数据结构(3).初始化时...
    欧辰_OSR阅读 29,671评论 8 265
  • 函数和对象 1、函数 1.1 函数概述 函数对于任何一门语言来说都是核心的概念。通过函数可以封装任意多条语句,而且...
    道无虚阅读 4,673评论 0 5
  • "人最可怕的是,永远在悔恨中度过一生。" 我们从小就被告知很多道理,诸如: 读书改变命运 选择比努力重要 行动是摆...
    程千寻有话说阅读 651评论 0 0
  • 我们从桥上走过,却常常忽略桥下的风景! 今夜无眠,在步入28岁的年纪里,有时候也会纠结爱情事业孰轻孰重,然而...
    meizi_lee阅读 179评论 0 0
  • 我的理想生活不过是一本书,一杯清茶,在落日余晖里和你一起,但是总有人喜欢妄意的揣测你的想法,对你的生活指手画脚。我...
    柯KAI阅读 269评论 0 0