前言
最近在开发过程中遇到了需要diff文件内容或者大json的业务场景,发现了一个比较好用且经典的js库diff。这个库功能十分强大,不仅能够简洁地输出字符串结果,也能够输出规范化的数据结构方便二次开发。这里笔者针对这个库的文档进行翻译和简单的讲解,同时也会展示自己的测试demo。
库简介
diff
是一个基于javascript实现的文本内容diff的库。它基于已发表论文中的算法An O(ND) Difference Algorithm and its Variations" (Myers, 1986).
安装
npm install diff --save
引用
// 不支持import 语法,也就是module引入
const jsDiff = require('diff');
API
-
JsDiff.diffChars(oldStr, newStr[, options])
这个方法将比较两段文字,比较的维度是基于单个字符
返回一个由描述改变的对象组成的列表。大致如下:
added
表示是否是添加内容,removed
表示是否为删除内容。共有的内容这两个属性都没有,value
表示内容,count
表示字符的个数(在某些用法中表示内容的行数)
可选的配置属性ignoreCase
: 标记为true时忽略字符的大小写,默认为false,这里给出一个测试例子:
文中例子的线上演示地址演示地址 -
JsDiff.diffWords(oldStr, newStr[, options])
该方法比较两段文字,比较的维度是单词,忽略空格,返回一个由描述改变对象组成的列表,可选的配置属性ignoreCase
: 同diffChars
中一样,这里给出一个使用例子:
-
JsDiff.diffWordsWithSpace(oldStr, newStr[, options])
该方法比较两段文字,比较的维度是单词,同上一个方法不同的是,它将比较空格的差异,返回一个由描述改变的对象组成的列表。这里给出一个例子:
-
JsDiff.diffLines(oldStr, newStr[, options])
比较两段文字,比较的维度是行。可选的配置项:
ignoreWhitespace
:设置为true时,将忽略开头和结尾处的空格,在diffTrimmedLines
中也有这个配置。
newlineIsToken
: 设置为true时,将换行符看作是分隔符。这样就可以独立于行内容对换行结构进行更改,并将其视为独立的(原文:This allows for changes to the newline