美文网首页
js深度工具:深拷贝、深度遍历、深度相等

js深度工具:深拷贝、深度遍历、深度相等

作者: 科研者 | 来源:发表于2021-02-23 15:32 被阅读0次

    目录

    内容

    1. 背景

    开发中,经常需要对一个对象进行深拷贝、深度遍历、深度相等测试等操作,就拿深拷贝来说,目前经常用到的深拷贝的方式有以下几种:

    • 将对象序列化成 JSON 字符串后,再反序化成对象 let copy = JSON.parse(JSON.stringify(value))
    • 第三方库提供的深拷贝工具,如 Lodash 的 _.cloneDeep(value)_.cloneDeepWith(value, customizer)

    但这些方法有以下缺点:

    • 不支持对象成员循环引用,比如下面这种:


      循环引用
    • 拷贝后会丢失类型信息,变成了普通的对象
    • 拷贝后会丢失成员引用关系信息
    • 不能根据类型自定义拷贝规则
    • 只能拷贝可枚举的属性
    • 不能拷贝函数
    • 不能指定拷贝深度

    为了解决这些问题,deep-tls 就出现了👏

    2. 简介

    deep-tls 是一个深度操作的工具集合,目前包括 深拷贝、深度遍历、深度相等判断 等等;

    其中,深拷贝可对任意数据进行深度拷贝,包括 函数 function、正则 RegExp、Map、Set、Date、Array、URL 等等;支持含循环引用关系的对象的拷贝,并且不会丢失成员的引用关系信息 和 类型信息,支持扩展,可根据数据类型定制拷贝逻辑,也可指定拷贝深度;所以,通过它可实现对任意类型的数据进行任意想要的拷贝;

    具有以下特性:

    • 支持对象成员循环引用
    • 拷贝后不会丢失类型信息 和 成员引用关系信息
    • 可指定拷贝深度
    • 即能拷贝可枚举的成员,也可拷贝不可枚举的成员
    • 可拷贝函数
    • 可根据类型自定义拷贝规则
    • 支持预设拷贝规则
    • 支持创建多个不同预设拷贝规则的拷贝函数

    详情请看:

    如果您在使用的过程中遇到了问题,或者有好的建议和想法,您都可以通过以下方式联系我,期待与您的交流:

    3. 安装方式

    目前,安装方式有以下几种:

    3.1. 方式1:通过 npm 安装

    npm install deep-tls
    

    3.2. 方式2:直接下载原代码

    您可直接从项目的 发行地址 下载 源码 或 构建后包文件;

    您可以直接把 源码 或 构建后 的包拷贝到您的项目中去;然后使用如下代码在您的项目中引入您需要使用的深度工具:

    import { deepCopy,createDeepCopy,deepLoopOwnProperty,deepLoopPropertyWithPrototype,isDeepEqual } from "path/to/package/deep-tls";
    

    3.3. 方式3:通过<script>标签引入

    您可直接从项目的 发行地址 中下载以 .iife.js 作为缀的文件,然后使用如下代码引用 和 使用 deep-tls:

    1. 引用 deep-tls

      <script src="path/to/package/deep-tls.iife.js"></script>
      
    2. 使用全局的 deepTls

      <script>
      // 使用全局的 deepTls
          const copy = deepTls.deepCopy(value);
      </script>
      

    4. API接口文档

    详情跳转至API接口文档

    相关文章

      网友评论

          本文标题:js深度工具:深拷贝、深度遍历、深度相等

          本文链接:https://www.haomeiwen.com/subject/abgrfltx.html