npm 包 object-map-transformer 使用教程

简介

object-map-transformer 是一个 Node.js 的 npm 包,用于实现 JavaScript 中对象的转换,可以方便地将一个对象映射为另一个对象,比如对象的 Key 或 Value 进行格式、类型转换等操作。

此工具包的核心理念是在保留对象原有数据结构的基础上,实现对对象内容的定向转换。其官方 GitHub 地址为:https://github.com/eggjs/videos/blob/master/object-map-transformer.md。

安装

在使用 object-map-transformer 前,您需要先确保安装了 Node.js 环境和 npm 包管理工具。在 Linux 或 macOS 系统下,您可以在终端中执行以下命令来安装 object-map-transformer

--- ------- ----------------------

当然,在 Windows 系统下,您只需要在命令行中执行相同的命令即可安装此工具包。

使用

接下来,我们来看一下 object-map-transformer 如何实现一个对象转换的过程。

基础

我们考虑如下场景,在程序中,我们需要对一个对象进行数据类型转换,将对象中的所有数值类型转换为字符串类型,同时删除对象中的空格。如何实现呢?

我们可以首先定义一个原始对象,代码如下所示:

----- ------ - -
    ----- -----
    ---- ---
    ------ ------------
    ------ -----------------------
    -------- ---------
    ------- -----
    --------- -
        ---- -----
        --------- -----
    --
--

我们希望将 person 对象中的所有数值类型转换为字符串类型,同时删除对象中的空格。我们可以定义一个转换规则,代码如下所示:

----- ------- - -
    ----- -------
    ---- ------
    ------ --------
    ------ --------
    -------- ----------
    ------- ---------
    --------- -----------
    ---- ---- -- ------- ---- --- -------- - ------------------- --- - --------------
--

在上面的代码中,我们针对 person 对象中的每个 Key 都对应了一个 Value,而这个 Value 对应的是转换后的 Key。当我们遇到不需要转换的 Key 时,我们可以使用 ‘*’ 占位符,表示不变。

接下来,我们可以调用 transformObject 函数来转换 person 对象。代码如下所示:

----- - --------------- - - ----------------------------------

----- --------- - ----------------------- ---------

-----------------------

运行后输出结果如下所示:

----- --------- - -
    ----- -----
    ---- -----
    ------ ------------
    ------ -----------------------
    -------- ---------
    ------- -----
    --------- -
        ---- -----
        --------- -----
    --
--

深度对象转换

上面的例子中,我们演示了一个较为简单的对象转换,主要针对对象的一级属性。但在实际场景中,对象往往是有层级结构的,比如对象中包含了另一个对象。我们可以通过定义多个 mapRule,来完成对于多级对象的转换。

下面让我们看一个例子,考虑如下场景。我们有一个多级对象,其中包含了数组和对象嵌套等复杂结构。一级 Key 命名规则如下:

  • 名称:string
  • 年龄:number
  • 联系方式:object
  • 住址:object
  • 省份:string
  • 城市:string
  • 区县:string
  • 详细地址:string
  • 特殊要求:array

我们需要将其转换为另一个对象,其中:

  • 姓名、年龄、联系方式直接映射
  • 住址映射为省份、城市、区县、详细地址,每个都是 string 类型
  • 特殊要求映射为一个字符串,内容为每个元素的描述,都用分号分隔

我们可以分别定义两个转换规则:mapRule1mapRule2。代码如下所示:

----- ------ - -
    ----- -----
    ---- ---
    -------- -
        ------ --------------
        ------ -----------------------
    --
    -------- -
        --------- ------
        ----- ------
        --------- --------
        ------- -------------------
    --
    ------------- -
        - ----- ----- ------ ------- --
        - ----- ----- ------ ------ --
    --
--

----- -------- - -
    ----- -------
    ---- ------
    -------- ----------
    -------- -
        --------- -------------------
        ----- ---------------
        --------- -------------------
        ------- -----------------
    --
    ------------- ---------------
--

----- -------- - -
    ----- -------
    ---- ------
    ------ ----------------
    ------ ----------------
    --------- -------------------
    ----- ---------------
    --------- -------------------
    ------- -----------------
    ------------- ---- -- -
        --- --- - ---
        ---------------- -- -
            -- --------- -- ---------- -
                --- -- ----------------------------
            -
        ---
        ------ ----
    --
--

----- - --------------- - - ----------------------------------

----- --------- - ----------------------- --------- ----------

-----------------------

上述代码中,mapRule1 定义了一级 Key 对应的二级 Key,用于表示层级结构。而 mapRule2 与我们之前的转换规则有所不同,具体来说,这是一种名为 Mapping Function 的规则,即可以使用一个函数,通过编写某些逻辑来完成转换。

运行代码后的输出结果如下所示:

-
  ----- -----
  ---- ---
  -------- - ------ -------------- ------ ---------------------- --
  -------- -
    --------- ------
    ----- ------
    --------- --------
    ------- ------------------
  --
  ------ --------------
  ------ -----------------------
  --------- ------
  ----- ------
  --------- --------
  ------- -------------------
  ------------- -------------------
-

我们可以看到,我们成功地完成了对于 person 对象的转换,得到了转换后的 newPerson。具体而言,我们通过两个 Map 规则,实现了各级 Key 的对象映射,同时使用 Mapping Function 完成了特殊要求的转换。

进阶

在我们逐渐熟悉了 object-map-transformer 的使用方法后,我们可以探究更多的高级功能,比如从源对象获取到指定的值后再进行转换等。

我们可以使用一个工厂函数 createMappingRule,来定义更为灵活的规则。代码如下所示:

----- - ----------------- - - ----------------------------------

----- --------- - -
    -- -
        -- -
            -- ----- -------
        --
    --
    -- -----
--

----- ------ - -------------------
    -- -
        -- -
            -- ----- -- ------- --- ---- --------------
        --
    --
    -- ----- -- ---- ----- -- - -- ---------
    -- ----- -- ---- ----- -- - -- ---------
---

----- --------- - -------------------------- --------

-----------------------

上述代码中,我们创造了一个 myRule 对象,其中定义了以 sourceObj 为源对象进行转换的规则。我们可以看到,这个规则相较于之前的示例更为灵活,可以根据源对象的具体值来进行转换。

特别地,源对象中并不拥有 e 属性,但是我们通过 myRule 对象的定义,仍然可以在新对象中看到它。这是因为在我们对于不存在的属性进行映射时,object-map-transformer 不会自动附加该属性,而是需要由映射函数来完成逻辑。

总结

在本文中,我们介绍了 object-map-transformer 这一 npm 工具包。我们从基础的对象转换入手,到在对于多级对象的转换方法进行了详细的介绍。最后,我们还讨论了几个高阶用法,包括使用 Mapping Function 和 createMappingRule 创建更为灵活的规则。

通过本文的学习,相信读者能够更好地掌握 object-map-transformer 工具包的技术细节,同时能够在 JavaScript 项目中快速转换对象,提升编码效率和质量。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/60055da281e8991b448db5d6


猜你喜欢

  • npm 包 datatables.net-editor-zf 使用教程

    datatables.net-editor-zf 是一个基于 datatables 的数据表格编辑器,为前端开发者提供了方便的数据编辑和保存功能。本教程将介绍如何使用 datatables.net-e...

    3 年前
  • npm 包 polly-ssml-builder 使用教程

    在前端开发过程中,使用文本转语音技术可以为用户提供更加友好的交互体验。而 Amazon Polly 的 SSML 语言可以实现高质量的语音合成效果。但是,手写 SSML 语言的难度较高,因此我们可以借...

    3 年前
  • npm 包 child-process-async 使用教程

    在前端开发中,我们常常需要使用到子进程来执行一些耗时的任务,如编译、压缩、打包等。而 Node.js 提供了 child_process 模块来支持创建和管理子进程。

    3 年前
  • npm 包 vile-bundler-outdated 使用教程

    作为前端开发者,我们使用许多 npm 包来帮助我们完成工作。然而,这些 npm 包可能会过期,存在安全漏洞,需要我们及时更新。vile-bundler-outdated 是一个 npm 包,能够检查项...

    3 年前
  • npm 包 vue2-toast-sample 使用教程

    前言 在前端开发中,弹窗是常用的交互方式之一。但是,如果每次都手写弹窗,会浪费很多时间和精力。Fortunately,目前有许多好用的 npm 包可以帮助我们快速创建弹窗,如 vue2-toast-s...

    3 年前
  • npm包datadog-middleware使用教程

    介绍 Datadog是国外一家著名的云监控服务商,提供监控、指标分析、错误追踪等功能。为了方便Node.js开发者使用Datadog服务,社区开发了一个npm包datadog-middleware,用...

    3 年前
  • npm 包 make-spa 使用教程

    前言 现在的前端开发越来越具有工程化的特点,而一款好的工具也会在很大程度上提升开发效率。 make-spa 就是一个非常实用的 npm 包,可以帮助我们快速搭建一个单页应用程序。

    3 年前
  • npm 包 ethereumjs-tx-es5 使用教程

    简介 ethereumjs-tx-es5 是一个 npm 包,它是 Ethereum 中用来创建交易的 JavaScript 库。它使用了 es5 的语法,可以保证代码的兼容性。

    3 年前
  • npm 包 mathy-unicode-characters 使用教程

    在前端领域,有时候需要在网页上展示一些数学符号或者特殊字符。但是由于这些字符不像普通字符那样容易输入,我们需要一些专门的工具来方便地在代码中使用这些字符。npm 包 mathy-unicode-cha...

    3 年前
  • npm 包 scroll-list 使用教程

    随着移动设备的普及,移动端的使用体验成为了前端开发中一个重要的问题。scroll-list 是一个 npm 包,可以帮助开发者实现移动端列表的滚动效果。本文将介绍如何使用该包,并给出详细的使用教程。

    3 年前
  • npm 包 html-entities-decoder 使用教程

    什么是 html-entities-decoder? html-entities-decoder 是一款能够将 HTML 实体编码转换成相应字符的轻量级 npm 包,可以被广泛地应用于处理来自 HTM...

    3 年前
  • npm 包 datatables.net-editor-se 使用教程

    介绍 datatables.net-editor-se 是 DataTables 的扩展插件,它提供了行内编辑的功能,可以方便地实现表格的增、删、改操作。 安装 你可以通过 npm 安装 datata...

    3 年前
  • npm包 bbo-styled-components使用教程

    前言 随着前端技术的飞速发展,前端界的项目容量也越来越庞大,同时也需要越来越多的开发工具来提高开发效率。在前端中,CSS样式是经常被用到的一个重要元素,而styled-components则是一种处理...

    3 年前
  • npm 包 datatables.net-editor-jqui 使用教程

    介绍 datatables.net-editor-jqui 是使用 jQuiery UI 的 datatables.net 插件,用于在 Web 应用中创建可编辑表格的 npm 包。

    3 年前
  • npm 包 page2pdf 使用教程

    JavaScript 是非常强大的一门语言,它在前端开发中有着举足轻重的地位。在 Web 应用程序的开发过程中,我们时常需要将页面转换为 PDF 文件。在这个过程中,我们可以利用一个名为 page2p...

    3 年前
  • npm包 yunpian-sms-service 使用教程

    简介 yunpian-sms-service是一个基于云片网短信平台API封装的Node.js模块。可以方便的在Node.js中发送短信。 本文将详细介绍npm包 yunpian-sms-servic...

    3 年前
  • npm 包 class-o-mat 使用教程

    在前端开发中,使用面向对象编程的方法能够使代码更加清晰、可读、易于维护。但是,对于一些新手来说,面向对象编程的理解和实现常常比较困难。为了解决这个问题,有一个叫做 class-o-mat 的 npm ...

    3 年前
  • npm包guster使用教程

    前端开发人员经常使用npm包来加速和简化开发过程。guster是一个使用简单、适用于前端开发的npm包,它允许我们快速搭建本地服务器、制作静态资源和预处理CSS等等。

    3 年前
  • npm 包 cow-foo 使用教程

    npm 是一个非常流行的 JavaScript 包管理工具,它可以让我们轻松地安装、管理并更新 JavaScript 包。其中,cow-foo 是一款封装了一些常见 JavaScript 操作功能的 ...

    3 年前
  • npm 包 jsdom-runner 使用教程

    前言 在前端开发中,我们经常需要对 DOM 进行一些操作,比如获取元素、修改元素样式等等。而在前端自动化测试中,我们也需要对 DOM 进行操作,比如模拟用户点击某个元素、验证页面某个元素是否出现等等。

    3 年前

相关推荐

    暂无文章