json diff patch

文件和图片的比对靠字符串

目录

流程

安装

效果

使用

自适应

数组:最长公共子序列(LCS)

数组中的对象,给定id,类似dom tree的比较


流程

安装

npm install jsondiffpatch

import * as jsondiffpatch from 'jsondiffpatch';
const jsondiffpatchInstance = jsondiffpatch.create(options);

效果

// 示例数据
const country = {name: 'Argentina',capital: 'Buenos Aires',independence: new Date(1816, 6, 9),unasur: true,
};// 克隆 country,使用 dateReviver 处理 Date 对象
const country2 = JSON.parse(JSON.stringify(country), jsondiffpatch.dateReviver);// 进行一些更改
country2.name = 'Republica Argentina';
country2.population = 41324992;
delete country2.capital;// 计算原始对象和修改后对象之间的差异(delta)
const delta = jsondiffpatch.diff(country, country2);// 断言差异是否符合预期的更改
assertSame(delta, {name: ['Argentina', 'Republica Argentina'], // 旧值,新值population: ['41324992'], // 新值capital: ['Buenos Aires', 0, 0], // 删除
});// 对原始对象应用差异
jsondiffpatch.patch(country, delta);// 反转差异
const reverseDelta = jsondiffpatch.reverse(delta);
// 也可以使用 jsondiffpatch.unpatch(country2, delta) 将 country2 返回到原始值// 再次计算应用差异后的对象和修改后对象之间的差异
const delta2 = jsondiffpatch.diff(country, country2);
assert(delta2 === undefined);
// undefined => 没有差异

使用

import * as jsondiffpatch from 'jsondiffpatch';// 仅在需要使用 diff-match-patch 进行文本差异对比时导入
import DiffMatchPatch from 'diff-match-patch';const jsondiffpatchInstance = jsondiffpatch.create({// 用于在比较数组时匹配对象,默认仅使用 === 操作符objectHash: function (obj) {// 该函数仅在对象不是按引用相等时使用return obj._id || obj.id;},arrays: {// 默认为 true,检测数组中移动的项(否则将注册为删除+添加)detectMove: true,// 默认为 false,移动的项的值不包含在差异中includeValueOnMove: false,},textDiff: {// 如果使用文本差异,则需要通过这个属性传入 diff-match-patch 库// 或者,可以通过使用 `jsondiffpatch/with-text-diffs` 导入 jsondiffpatch 来避免传递 diff-match-patchdiffMatchPatch: DiffMatchPatch,// 默认为 60,使用文本差异算法(google-diff-match-patch)的最小字符串长度(左右两侧)minLength: 60,},propertyFilter: function (name, context) {/*这是一个可选的函数,用于忽略对象属性(例如,易变的数据)name: 属性名称,存在于 context.left 或 context.right 对象中context: 差异上下文(具有 context.left 和 context.right 对象)*/return name.slice(0, 1) !== '$';},cloneDiffValues: false /* 默认为 false。如果为 true,则在获得的差异中值将被克隆(默认使用 jsondiffpatch.clone),以确保差异不保留对左或右对象的引用。如果多次对相同的对象进行差异比较和合并而不序列化差异,则这将变得有用。可以在这里指定一个自定义的 clone(value) 函数,而不是 true*/,
});

https://github.com/benjamine/jsondiffpatch

自适应

数组:最长公共子序列(LCS)

数组中的对象,给定id,类似dom tree的比较

  • 要匹配数组中的对象,您必须提供一个函数(这是匹配对象的方式,否则将使用按位置进行哑匹配)。有关更多详细信息,请查看 Array diff 文档objectHash

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/823976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3(六):Vue3其他API、Vue3新组件Teleport、Vue2和3区别

一、其他API 1.shallowRef 与 shallowReactive (1)shallowRef 1. 作用:创建一个响应式数据,但只对顶层属性进行响应式处理。 2.用法: let myVar shallowRef(initialValue); 3. 特点:只跟踪引用值的变化&…

【华为OD机试】小明的幸运数字【C卷|100分】

【华为OD机试】-真题 !!点这里!! 【华为OD机试】真题考点分类 !!点这里 !! 题目描述 小明在玩一个游戏,游戏规则如下: 在游戏开始前,小明站在坐标轴原点处(坐标值为0). 给定一组指令和一个幸运数,每个指令都是一个整数,小明按照指令前进指定步数或者后退指定步数。 前…

IntelliJ IDEA配置类注释模板和方法注释模板

配置类注释模板和方法注释模板 IDEA模板预定义变量类注释模方法注释模板方法参数优化 IDEA模板 在IDEA中,自带的注释模板可能不满足自身需求或者不满意,此时可以通过配置IDEA模板来解决。 预定义变量 内置模板是可编辑的,除了静态文本、代码和…

react中关于类式组件和函数组件对props、state、ref的使用

文章中有很多蓝色字体为扩展链接&#xff0c;可以补充查看。 常用命令使用规则 组件编写方式: 1.函数式 function MyButton() { //直接return 标签体return (<>……</>); }2.类 class MyButton extends React.Component { //在render方法中&#xff0c;return…

GPT-3.5和GPT-Plus的区别

GPT-3.5和GPT-Plus都是OpenAI开发的大型语言模型,但它们之间有一些区别: GPT-3.5就是大家熟知的ChatGPT GPT-Plus 是Open AI 的更强的AI模型GPT-4版本。两者区别是&#xff1a; 模型规模:GPT-Plus是GPT-3的一个更大版本,参数量更多。而GPT-3.5是GPT-3的一个优化版本,在参数量…

4月帮助问题汇总,日更

4-16&#xff1a; 有人提出一个问题&#xff0c;就是说领导要让在一个什么都没装的linu系统中防止一个文件以供访问&#xff0c;已帮助&#xff08;https://ask.csdn.net/questions/8089263?spm1001.2014.3001.5501&#xff09;有人在全屏播放视频的视频上创建一个div悬浮在视…

基于Copula函数的风光功率联合场景生成_任意修改生成的场景数目(附带Matlab代码)

基于Copula函数的风光功率联合场景生成 削减为6个场景 部分展示削减为5个场景 部分展示 风光等可再生能源出力的不确定性和相关性给系统的设计带来了极大的复杂性&#xff0c;若忽略这些因素&#xff0c;势必会在系统规划阶段引入次优决策风险。因此&#xff0c;在确定系统最佳…

TR-DPO:革新大模型对齐技术

这篇论文中提出的TR-DPO&#xff08;Trust Region Direct Preference Optimization&#xff09;方法的架构或流程设计主要侧重于改进语言模型对齐过程中的稳定性和有效性。 在传统的对齐方法中&#xff0c;模型在学习的时候需要尽可能地靠近一个预先设定的参考模型。这就像是给…

c语言,单链表的实现----------有全代码!!!!

1.单链表的定义和结构 单链表是一种链式的数据结构&#xff0c;它用一组不连续的储存单元存反线性表中的数据元素。链表中的数据是以节点的形式来表示的&#xff0c;节点和节点之间相互连接 一般来说节点有两部分组成 1.数据域 &#xff1a;数据域用来存储各种类型的数据&…

Windows系统下查看C语言文件反汇编

一、配置编译器环境变量 1.下载mingw64 MinGW 的全称是&#xff1a;Minimalist GNU on Windows &#xff0c;MinGW 就是 GCC 的 Windows 版本 。 MinGW-w64 与 MinGW 的区别在于 MinGW 只能编译生成32位可执行程序&#xff0c;而 MinGW-w64 则可以编译生成 64位 或 32位 可执行…

订单表里的防止并发下单

说下逻辑 保证订单表里的防止并发下单并且是唯一&#xff0c;设置一个订单表一个订单交易哈希字段&#xff0c;设置一个索引规则&#xff0c;保证唯一&#xff0c;如果下单的订单交易哈希字段重复直接不让他添加订单。 在具体实现时&#xff0c;可以通过在数据库中创建唯一索…

day11 | 栈与队列 part-3 (Go) | 239 滑动窗口最大值、347 前 K 个高频元素 (好难)

今日任务 239 滑动窗口最大值 (题目:. - 力扣&#xff08;LeetCode&#xff09; )347 前 K 个高频元素 (题目: . - 力扣&#xff08;LeetCode&#xff09; )栈与队列总结 239 滑动窗口最大值 题目:. - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums&#xf…

处理json文件,并将数据汇总至Excel表格

从scores.jason文件中读取学生信息,输出学生的学号&#xff0c;姓名&#xff0c;各科成绩&#xff0c;平均分, 各科标准差 scores.jason {"学院": "计算机学院","班级": "2022级1班","成绩": [{"学号": 1001,&q…

使用avx2 指令集加速向量算法运算

使用cpu-z 查看cpu指令集 2 向量加&#xff0c;乘法&#xff0c;除法 我们使用向量加&#xff0c;为什么函数是0 到 8 的计算&#xff0c;因为avx2 寄存器为256位&#xff0c;同时设置启动增强指令集 #include <immintrin.h> // 引入包含AVX2指令集的头文件void vecto…

C语言学习/复习21----初阶阶段总结

C语言初阶总结 一、C语言概述 C语言是一种通用的、过程式的计算机编程语言&#xff0c;支持结构化的编程、词汇变量以及递归等特性。它既具有高级语言的特点&#xff0c;又具有汇编语言的特点&#xff0c;适合编写系统软件和应用软件。 二、基本语法 数据类型&#xff1a;包…

sudo ./configure --prefix=/usr/local/nginx sudo make sudo make install

sudo ./configure --prefix/usr/local/nginx sudo make sudo make install这三条命令是用于编译和安装 Nginx 的源代码。 sudo ./configure --prefix/usr/local/nginx&#xff1a;./configure&#xff1a;这个命令运行了 Nginx 的配置脚本&#xff0c;它会检查系统环境&#x…

C++类和对象:赋值重载,const成员

文章目录 1.赋值运算符重载1.1运算符重载1.2 赋值运算符重载1.3 前置和后置重载 2.日期类的实现3. const成员函数4 取地址及const取地址操作符重载 上文介绍了前三个默认成员函数&#xff0c;本文会介绍剩下三个&#xff0c; 赋值重载会重点展开。 1.赋值运算符重载 1.1运算符…

【ZZULIOJ】1069: 向Z同学学习(Java)

目录 题目描述 输入 输出 样例输入 Copy 样例输出 Copy code 题目描述 Z同学为了实现暑假去云南旅游的梦想&#xff0c;决定以后每天只消费1元&#xff0c;每花k元就可以再得到1元&#xff0c;一开始Z同学有M元&#xff0c;问最多可以坚持多少天。 输入 输入2个整数M,…

next_siblings()函数介绍

next_siblings() 是一个 BeautifulSoup 库中的函数&#xff0c;用于在 HTML 或 XML 文档中查找当前节点之后的所有兄弟节点。它返回一个生成器对象&#xff0c;可以用于迭代获取当前节点之后的所有兄弟节点。 例如&#xff0c;如果你有一个 HTML 文档结构如下&#xff1a; &l…

代码随想录 Day17 字符串 | LC344 反转字符串 LC541 反转字符串II 卡码网54替换数字

一、反转字符串 题目&#xff1a; 力扣344&#xff1a;反转字符串 编写一个函数&#xff0c;其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间&#xff0c;你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题…