js:使用diff.js实现文本内容差异比较

news/2024/10/18 6:10:53/

实现效果
在这里插入图片描述

目录

    • 简介
    • 安装
    • 示例
      • 1、json比较diffJson
      • 2、按行比较diffLines
      • 3、比较数组diffArrays
    • 总结
    • 参考资料

简介

A javascript text differencing implementation.

译文:javascript文本差异实现。

相关文档

  • github https://github.com/kpdecker/jsdiff
  • npmjs https://www.npmjs.com/package/diff

安装

npm

npm install diff --save

CDN:

https://unpkg.com/diff@5.1.0/dist/diff.js

示例

1、json比较diffJson

// CommonJS
// const Diff = require('diff')// EMS
import * as Diff from 'diff'const one = {id: 1,name: 'Tom',age: 18,
}const other = {id: 2,name: 'Jack',age: 18,
}const diff = Diff.diffJson(one, other)console.log(diff);

输出

[{ count: 2, value: '{\n  "age": 18,\n' },{count: 2,added: undefined,removed: true,value: '  "id": 1,\n  "name": "Tom"\n'},{count: 2,added: true,removed: undefined,value: '  "id": 2,\n  "name": "Jack"\n'},{ count: 1, value: '}' }
]

2、按行比较diffLines

// const Diff = require('diff')
import * as Diff from 'diff'const one = {id: 1,name: 'Tom',age: 18,
}const other = {id: 2,name: 'Jack',age: 18,
}const diff = Diff.diffLines(JSON.stringify(one, null, 2),JSON.stringify(other, null, 2)
)console.log(diff)

输出

[{ count: 1, value: '{\n' },{count: 2,added: undefined,removed: true,value: '  "id": 1,\n  "name": "Tom",\n'},{count: 2,added: true,removed: undefined,value: '  "id": 2,\n  "name": "Jack",\n'},{ count: 2, value: '  "age": 18\n}' }
]

3、比较数组diffArrays

// const Diff = require('diff')
import * as Diff from 'diff'const one = {id: 1,name: 'Tom',age: 18,
}const other = {id: 2,name: 'Jack',age: 18,
}const diff = Diff.diffArrays(JSON.stringify(one, null, 2).split('\n'),JSON.stringify(other, null, 2).split('\n'),
)console.log(diff);// 组装结果
let list = diff.map((part) => {if (part.added) {return part.value.map(x=>'+' + x).join('\n')} else if (part.removed) {return part.value.map(x=>'-' + x).join('\n')} else {return part.value.join('\n')}
})console.log(list.join('\n'))

输出

[{ count: 1, value: [ '{' ] },{count: 2,added: undefined,removed: true,value: [ '  "id": 1,', '  "name": "Tom",' ]},{count: 2,added: true,removed: undefined,value: [ '  "id": 2,', '  "name": "Jack",' ]},{ count: 2, value: [ '  "age": 18', '}' ] }
]

组合后输出

{
-  "id": 1,
-  "name": "Tom",
+  "id": 2,
+  "name": "Jack","age": 18
}

总结

通过以上示例可以发现:

  1. json比较的缺点,行的先后顺序 改变了
  2. 按行比较的缺点,有很多的 回车符 \n 不好按行处理
  3. 比较数组较为理想,可以继保留了输入顺序,同时也能够按行处理比较结果

参考资料

  1. 在线示例
  2. diff.js使用指南

http://www.ppmy.cn/news/742979.html

相关文章

燃气射流 matlab,基于MATLAB全射流喷头组合喷灌计算模拟

[1] 黄志斌.PSZ型自反馈式射流喷头的研究[J].江苏大学学报(自然科学版),1981,2(2):28-31[2] 黄修桥,廖永诚,刘新民.有风条件下喷灌系统组合均匀度的计算理论与方法研究[J].灌溉排水,1995,14(1):12-18[3] 王文元,杨路华.微喷头布置形式对喷洒均匀度的影响[J].灌溉排水,1994,13(2…

京津冀协同创新基础研究首批项目验收 多个研究成果得到切实应用

新华社天津1月31日电(记者周润健)京津冀三地科技主管部门组织专家31日在天津对京津冀协同创新首批基础研究合作专项,“南水北调对京津冀受水区生态环境影响及调控机制研究”项目进行了验收。专家组相关负责人表示,通过验收情况来看…

天津大众冰雪季拉开帷幕 市民可免费体验冰雪项目

第五届全国大众冰雪季暨天津市第二届“迎冬奥,上冰雪”系列活动新闻发布会。 张道正 摄 第五届全国大众冰雪季暨天津市第二届“迎冬奥,上冰雪”系列活动新闻发布会。 张道正 摄 中新网天津1月17日电 (记者 张道正)第五届全国大众冰雪季暨天津市第二届“…

swiper炫酷_swiper响应式全屏banner图片滚动轮播代码

使用方法: 1、head引入css文件 2、head引入js文件 3、body引入HTML代码 用户口碑推荐 百万企业信赖推荐,市场口碑零差评,性价比高 立即创建 太清凉茶甜品网站需要展示产品色香味的特色,微企点的强大的页面布局功能和参数调整&…

Ghostghost备份系统文件

工具/原料 Symantec Ghost 11.0.2 电脑,WinPE,U盘 方法/步骤 1 ①安装 一键Ghost硬盘版,或者制作一个WinPE(U盘启动盘) ②如图,若为一键Ghost硬盘版,直接在系统中运行,选择 手动备份…

让你怦然心动的高级健身教练培训班

让你怦然心动的高级健身教练培训班 健康的身体,快乐的生活,是每一个人一生中最大的财富和追求。英伦国际正是基于这种生活理念,应势而生,为大众健身和全民健身提供优质、优秀的服务 英伦国际也是顺应市场运营而生,本着…

2017年全国大学生电子设计竞赛河北省获奖名单

2017年全国大学生电子设计竞赛河北赛区获奖名单 序号 赛区 组别 号参赛队学校 学生姓名学生姓名学生姓名 奖项 250 河北 本科组 I 北华航天工业学院王宇航 赵德彪 林倩 二等奖 251 河北 高职高专组 M 承德石油高等专科学校 冀恩开 路华 张延伟 二等奖 252 河北…

Vue2.5从零开发猫眼⑤——影院页开发

Vue2.5从零开发猫眼系列以更新完毕 Vue2.5从零开发猫眼①——前言 Vue2.5从零开发猫眼②——项目开始前准备 Vue2.5从零开发猫眼③——启动页开发 Vue2.5从零开发猫眼④——Home页开发 Vue2.5从零开发猫眼⑤——影院页开发 Vue2.5从零开发猫眼⑥——个人中心组件开发 V…