深拷贝和数组扁平化

Posted maoxiaodun

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深拷贝和数组扁平化相关的知识,希望对你有一定的参考价值。

这两天做笔试题的时候遇到了深拷贝,在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;
}

 

以上是关于深拷贝和数组扁平化的主要内容,如果未能解决你的问题,请参考以下文章

jquery怎样深拷贝一个数组

数组的深复制扁平化排序及去重相关方法

数组的深复制扁平化排序及去重相关方法

如何实现数组深拷贝和浅拷贝?

深拷贝数组 np.copy

JS深拷贝数组和对象