npm 包 json-similarity 使用教程

阅读时长 8 分钟读完

前言:在前端开发中,经常会遇到需要比较对象的情况,但是 JavaScript 中比较对象并不是一件简单的事情。这时候,我们可以借助 json-similarity 这个 npm 包来快速地比较两个对象的相似度,本文将详细介绍该包的使用方法和原理。

什么是 json-similarity

json-similarity 是一个可以计算两个 JSON 对象之间的相似度的 npm 包,它通过比较两个 JSON 对象的属性值、类型、顺序等维度来计算相似度。

使用方法

安装

在终端中运行以下命令进行安装:

基本用法

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

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

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

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

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

以上代码中,obj1 和 obj2 是要比较的两个 JSON 对象,jsonSimilarity 函数将它们作为参数传入,返回它们之间的相似度。

配置参数

json-similarity 提供了一些可配置的参数,用来调整比较的灵敏度和维度,具体如下:

参数 描述 默认值
ignoreKeys 指定要忽略比较的属性名列表 []
ignoreOrder 是否忽略属性的顺序 false
depth 比较的深度,即对象嵌套层数 1
primitive 是否将数组、对象等复合类型当做基本类型比较 true
weights 表示每个维度的重要程度,用于计算相似度 { type: 1, count: 1, value: 2, structure: 1 }

配置的使用方法如下:

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

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

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

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

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

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

示例代码

以下是一个实际的场景,假设我们有一个保存在数据库中的用户信息对象,我们需要比较它和用户提交的表单数据的相似度,以便进行数据校验。具体思路如下:

  • 将从表单中接收到的数据构建为一个 JSON 对象;
  • 从数据库中查询出对应的用户信息对象,并将其转化为 JSON 格式;
  • 使用 json-similarity 包计算两个 JSON 对象之间的相似度,判断是否满足设定的阈值。

以下是示例代码:

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

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

在上面的代码中,我们使用了 mongoose 库来操作数据库,userModel 表示的是数据模型。通过 findOne 方法在数据库中查找到指定用户信息,然后将其转化为 JSON 格式。使用 json-similarity 包计算两个 JSON 对象之间的相似度,判断是否满足设定的阈值,如果相似度大于等于 70,说明两个对象的相似度达到了预期。将其作为 validate 函数的返回值输出。

原理解析

json-similarity 包的原理可以分为两部分:

  1. 计算相似度

json-similarity 包计算相似度的方法比较简单,将传入的两个对象的不同属性划分为四个纬度:类型(type)、数量(count)、值(value)、结构(structure)。通过对不同维度进行加权求和的方式,计算出两个对象之间的相似度。

以下是 json-similarity 包计算相似度的部分源码:

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

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

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

  ------ -- - --------- - ------------ - ----
-
  1. 计算不同维度的差异

json-similarity 包还提供了 diffCalculator 对象来计算不同维度的差异,具体如下:

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

总结

json-similarity 是一款非常实用的 npm 包,能够帮助我们快速地计算两个 JSON 对象之间的相似度。本文介绍了它的安装方法、基本用法、配置参数以及详细的示例代码,并对其原理进行了解析。使用 json-similarity 包可以很好地优化我们的编码效率,在实际开发中也具有很大的指导意义。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/60055cbc81e8991b448da4c8

纠错
反馈