深拷贝和数组扁平化

这两天做笔试题的时候遇到了深拷贝,在js中,一些基本类型是存在栈空间里的,而引用类型如object function之类的都是存在堆内存之中,只不过是他们的地址是在栈内存,通过地址找到对内存空间中的数据

上代码

function deepClone(obj){
            var cloneobj = Array.isArray(obj)?[]:{}; //判断是数组还是对象
            if(obj &&  typeof obj === "object"){ //判断当前的对象是否存在且类型是否object
                for(key in obj){ // 遍历对象
                if(obj.hasOwnProperty(key)){ //判断对象属性值是否存在
                
                    if(obj[key] && typeof obj[key] ==="object"){ // 进入元素判断
                      cloneobj[key] = deepClone(obj[key]); //如果子元素也为对象或者数组就可以进行递归调用
                    }else{
                        cloneobj[key] = obj[key];//不是则正常赋值
                    }
                }
              }
            }
            return cloneobj;    
        }

2. 数组扁平化有很多方法,这里介绍两种,第一种arr.join().split(''); 这种方法简单粗暴,先把数组转化为字符,然后再将字符切割为数组;

第二种就上代码

function flatten(arr){
   let res =[];
   if(Array.isArray(arr)){
     for(let i =0; i<arr.length; i++){
        if(Array.isArray(arr[i])){
            res = res.concat(flatten(arr[i])
       }else{
            res.push(arr[i])
       }
     }
  }
      return res;
}

 

posted @ 2018-11-04 16:19  矛小盾  阅读(181)  评论(0编辑  收藏  举报