复杂对象转变为简单对象

再说这个之前与要先了解一下深拷贝:
首先深拷贝和浅拷贝只针对像 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))

你可能感兴趣的:(复杂对象转变为简单对象)