博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js 深拷贝方法
阅读量:6136 次
发布时间:2019-06-21

本文共 1494 字,大约阅读时间需要 4 分钟。

深拷贝浅拷贝的方法

浅拷贝

//Object 方法 object.assign(target,source)// 将源拷贝到目标,切返回目标 es6 扩展运算符 //数组方法: slice ,concat,es6扩展运算符复制代码

深拷贝的两个方法

  1. JSON序列化
let obj  = {a:2,b:{c:1}}let str = JSON.strify(obj)JSON.parse(str);复制代码

JSON 存在几个问题,没法转化 是Date、Function、RegExp,不相信的同学可以试试,对象中有这几个类型的值,拷贝不出来 2.深层递归

function deepClone (obj){    let  cloonObj = {};    let ary = [];    if(typeof obj !== "object"){        return obj;    }    if(obj instanceof Array){        for(let val of obj ){            if(typeof val === "object"){                ary.push(deepClone(val));            }else {                ary.push(val);            }        }        return ary;    } else {        for(let key in obj){            if( obj[key] instanceof Object){                cloonObj[key] = deepClone(obj[key]);            } else {                cloonObj[key] = obj[key];            }        }        return cloonObj;    }}复制代码

上面代码 只因为 判断是数组还是Object,写的很冗余,精简一下 得到 如下

注意 注意 史上最简短的深拷贝代码来了

function  deepClone (obj){    let t =  new obj.constructor    if(obj instanceof Date) return new Date(obj);    if(obj instanceof RegExp) return new RegExp(obj);    if(typeof obj !== "object") return obj;    for(let key in obj){        t[key] = deepClone(obj[key]);    }    return t;}复制代码

验证下:

let  obj  =  {a:1,b:{c:2},d:[1,2],e:new RegExp(/\d+/),f:function(){console.log(1)},g:new Date()}let  ObjCloone = deepClone(obj)console.log(ObjCloone);/*>>{ a: 1,  b: { c: 2 },  d: [ 1, 2 ],  e: /\d+/,  f: [Function: f],  g: 2018-10-02T10:15:19.672Z }  */复制代码

转载地址:http://zqrua.baihongyu.com/

你可能感兴趣的文章
Data Wrangling文摘:Non-tidy-data
查看>>
while()
查看>>
常用限制input的方法
查看>>
IIS7下使用urlrewriter.dll配置
查看>>
并行程序设计学习心得1——并行计算机存储
查看>>
JAVA入门到精通-第86讲-半双工/全双工
查看>>
bulk
查看>>
js document.activeElement 获得焦点的元素
查看>>
C++ 迭代器运算
查看>>
【支持iOS11】UITableView左滑删除自定义 - 实现多选项并使用自定义图片
查看>>
day6-if,while,for的快速掌握
查看>>
JavaWeb学习笔记(十四)--JSP语法
查看>>
【算法笔记】多线程斐波那契数列
查看>>
java8函数式编程实例
查看>>
jqgrid滚动条宽度/列显示不全问题
查看>>
在mac OS10.10下安装 cocoapods遇到的一些问题
查看>>
angularjs表达式中的HTML内容,如何不转义,直接表现为html元素
查看>>
css技巧
查看>>
Tyvj 1728 普通平衡树
查看>>
[Usaco2015 dec]Max Flow
查看>>