首页 > 其他分享 >js 深度克隆实现

js 深度克隆实现

时间:2022-10-17 11:36:18浏览次数:62  
标签:return 克隆 checkType clone js let key 深度 any

function checkType(any) {
  return Object.prototype.toString.call(any).slice(8, -1)
}
function clone(any){
  if(checkType(any) === 'Object') { // 拷贝对象
    let o = {};
    for(let key in any) {
      o[key] = clone(any[key]) // 递归
    }
    return o;
  } else if(checkType(any) === 'Array') { // 拷贝数组
    var arr = []
    for(let i = 0,leng = any.length;i<leng;i++) {
      arr[i] = clone(any[i])
    }
    return arr;
  } else if(checkType(any) === 'Function') { // 拷贝函数
    return new Function('return '+any.toString()).call(this)
  } else if(checkType(any) === 'Date') { // 拷贝日期
    return new Date(any.valueOf())
  } else if(checkType(any) === 'RegExp') { // 拷贝正则
    return new RegExp(any)
  } else if(checkType(any) === 'Map') { // 拷贝Map 集合
    let m = new Map()
    any.forEach((v,k)=>{
      m.set(k, clone(v))
    })
    return m
  } else if(checkType(any) === 'Set') { // 拷贝Set 集合
    let s = new Set()
    for(let val of any.values()) {
      s.add(clone(val))
    }
    return s
  }
  return any;
}

  

标签:return,克隆,checkType,clone,js,let,key,深度,any
From: https://www.cnblogs.com/maomao93/p/16798559.html

相关文章

  • js下载文件
    1.直接打开url地址,地址可以是绝对路径或者接口拼接的地址location.href=url2.接口返回文档流axios({method:data.method,url:`${data.url}${data.......
  • Js回溯算法
    原文链接:https://www.cnblogs.com/yalong/p/16798569.html回溯算法回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条......
  • go json.Marshal 和 json.Unmarshal与结构体
    结构体属性名字小写会被忽略packagemainimport("encoding/json""fmt")typePeoplestruct{namestring`json:"name"`Heightstring`jso......
  • web前端常用的js封装,收藏起来备用!
    做前端开发的同学是不是经常封装一些常用的函数方法,比如,日期格式、对象转换等。话不多说,直接总结一些常用的封装函数直接放在utils中拿来即用!//数组对象深拷贝constdeep......
  • nodejs base64 编码解码
    一、普通字符串编码varb=newBuffer('JavaScript');vars=b.toString('base64');//SmF2YVNjcmlwdA==解码:varb=newBuffer('SmF2YVNjcmlwdA==','base64')......
  • 面试官:深度不够,建议回去深挖
    作者:小傅哥博客:https://bugstack.cn沉淀、分享、成长,让自己和他人都能有所收获!......
  • Node.js躬行记(24)——低代码
    低代码开发平台(LCDP)是无需编码(0代码)或通过少量代码就可以快速生成应用程序的开发平台。让具有不同经验水平的开发人员可以通过图形化的用户界面,通过拖拽组件和模型驱动......
  • 实验室深度学习服务器崩溃——Oops: 0000 [#1] SMP NOPTI
    这两天实验室的服务器总是崩溃,重启已经不能解决问题了,由于是跑深度学习的服务器,而且还是承接国家级项目的运行服务器,可以说是实验室的主要生产力了,给出报错的日志:  Oc......
  • Vue.js -- 样式绑定
    前言本文主要介绍了vue.js样式绑定的几种形式。class字符串形式代码演示:<!DOCTYPEhtml><htmllang="en"><head><title>vue样式绑定</title><scriptsrc=......
  • js列表合并以及处理响应数据
    JS实现列表元素合并 Vue做一个穿梭框的功能,需要用到合并列表元素,左列表合并到右列表。核心思路是右三个数据列表,左、右、选中method:{toRight:function(){......