zoukankan      html  css  js  c++  java
  • 深拷贝和数组扁平化

    这两天做笔试题的时候遇到了深拷贝,在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;
    }
  • 相关阅读:
    利用console控制台调试php代码
    数据库比对脚本(PHP版)
    Symfony框架系列----1.入门安装
    Symfony框架系列----常用命令
    Symfony命令行
    Linux SCP指令
    Linux 搭建SVN服务器
    Linux下 保存 git账号密码
    js 视差滚动 记录备份
    移动端 -webkit-user-select:text; ios10 bug 解决方案
  • 原文地址:https://www.cnblogs.com/maoxiaodun/p/9904372.html
Copyright © 2011-2022 走看看