jsDiff
简介
本demo是基于openHarmony系统下使用三方js库jsdiff,jsdiff是一个用于比较两个文件或字符串差异的JavaScript库。
下载安装
ohpm install diff
ohpm install @types/diff --save-dev //import diff 的时候语法报错.其原因是diff包内不含类型声明,需要 @types/diff 下载这个包的声明文件,从而解决语法的报错.
OpenHarmony ohpm 环境配置等更多内容,请参考如何安装 OpenHarmony ohpm 包
使用说明
import { diffChars} from 'diff'
const one = 'beep boop afff阿三是技术';
const other = 'beepboob 啊发撒烦烦烦 e ';
const diff = diffChars(one, other);
diff.forEach((part) => {
if (part.added) {
//do something
} else if (part.removed) {
//do something
} else {
//do something
}
let str = part.value; //比较的字符或字符串
});
// 更多的用法參考index.ets 文件
part对象属性说明
value: 文字内容
added:如果值被插入到新字符串中,则为真
removed:如果值已从旧字符串中删除,则为真
接口
| 模块名 | 入参 | 功能 | 备注 |
|---|---|---|---|
| diffChars(oldStr: string, newStr: string[, options]) | oldStr:原字串, newStr:新子串 |
区分两个文本块,逐个字符进行比较 | ignoreCase:true忽略大小写差异。默认为false |
| diffWords(oldStr: string, newStr: string[, options]) | oldStr:原字串, newStr:新子串 |
区分两个文本块,逐字比较,忽略空格 | ignoreCase: 同中diffChars |
| diffWordsWithSpace(oldStr: string, newStr: string[, options]) | oldStr:原字串, newStr:新子串 |
区分两个文本块,逐字比较,将空格视为重要 | ignoreWhitespace:true忽略前导和尾随空格。这与diffTrimmedLines;newlineIsToken:true将换行符视为单独的标记 |
| diffLines(oldStr: string, newStr: string[, options]) | oldStr:原字串, newStr:新子串 |
区分两个文本块,逐行比较 | |
| diffTrimmedLines(oldStr: string, newStr: string[, options]) | oldStr:原字串, newStr:新子串 |
区分两个文本块,逐行比较,忽略前导和尾随空格 | |
| diffSentences(oldStr: string, newStr: string[, options]) | oldStr:原字串, newStr:新子串 |
区分两个文本块,逐句比较 | |
| diffCss(oldStr: string, newStr: string[, options]) | oldStr:原字串, newStr:新子串 |
区分两个文本块,比较 CSS 标记 | |
| diffJson(oldObj: object, newObj: object[, options]) | oldObj:原对象, newObj:新对象 |
比较两个 JSON 对象,比较每个对象上定义的字段 | |
| diffArrays(oldArr: array, newArr: array[, options]) | oldStr:原数组, newArr:新数组 |
区分两个数组,比较每个项目是否严格相等 (===) | |
| createPatch(fileName: string,oldStr: string,newStr: string,oldHeader?: string,newHeader?: string,options?: PatchOptions): string | fileName:字符串将在文件名部分输出 oldStr:原始字符串值 newStr:新字符串值 oldHeader:附加信息,包括在旧的文件头。 newHeader:附加信息,包括在新的文件头。 |
用于生成补丁的文件和内容信息,配置项可包含 context(上下文行数)等 | |
| createTwoFilesPatch(fileName: string,oldStr: string,newStr: string,oldHeader?: string,newHeader?: string,options?: PatchOptions): string | fileName:字符串将在文件名部分输出 oldStr:原始字符串值 newStr:新字符串值 oldHeader:附加信息,包括在旧的文件头。 newHeader:附加信息,包括在新的文件头。 |
用于生成补丁的文件和内容信息,配置项可包含 context(上下文行数)等 | |
| structuredPatch(fileName: string,oldStr: string,newStr: string,oldHeader?: string,newHeader?: string,options?: PatchOptions): string | fileName:字符串将在文件名部分输出 oldStr:原始字符串值 newStr:新字符串值 oldHeader:附加信息,包括在旧的文件头。 newHeader:附加信息,包括在新的文件头。 |
用于生成补丁的文件和内容信息,配置项可包含 context(上下文行数)等 | |
| parsePatch(diffStr: string, options?: { strict?: boolean undefined }): ParsedDiff[]; | diffStr:差异字串 strict:是否严格 |
将补丁解析为结构化数据。返回补丁的JSON对象表示形式,适合与‘ applyPatch() ’方法一起使用。 | |
| convertChangesToXML(changes: Change[]): string; | changes:更改列表 | 将更改列表转换为序列化的XML格式。 | |
| canonicalize(obj: any, stack: any[], replacementStack: any[]): any | obj:需要规范化的原始对象 stack:用于跟踪递归过程中已访问的对象,防止循环引用导致的栈溢出 replacementStack: 与 stack 对应,存储规范化后的对象,用于替换循环引用中的原始对象。 |
用于深度比较复杂对象 | |
| merge(mine: string, theirs: string, base: string): ParsedDiff; | mine:你的版本 theirs:对方的版本 base:共同的基础版本 |
即根据两个不同版本的修改(mine 和 theirs)以及它们的共同基础版本(base),自动合并出一个最终结果 | |
| applyPatch(source: string,patch: string ParsedDiff [ParsedDiff],options?: ApplyPatchOptions): string false | source:原始文本内容 uniDiff:Unified Diff 格式的补丁文本,通常由 createPatch 方法生成。 options: 可选配置对象 |
jsdiff 库中的 applyPatch 方法用于将 Unified Diff 格式的补丁应用到原始文本上,生成更新后的文本。 | |
| applyPatches(patch: string ParsedDiff[], options: ApplyPatchesOptions): void | patch:单个补丁字符串或多个补丁字符串组成的数组。 options:应用补丁选项 |
应用一个或多个补丁 |
更多模块的使用可参考官方文档,单元测试用例详情见TEST.md
约束与限制
在下述版本验证通过:
- DevEco Studio: NEXT Beta1-5.0.3.806, SDK:API12 Release(5.0.0.66)
- DevEco Studio: 4.0 Release(4.0.3.600), SDK: API10 (4.0.10.11)
- DevEco Studio: 4.0 Beta2(4.0.3.512), SDK: API10 (4.0.10.9)
- DevEco Studio: 3.1 Beta2(3.1.0.400), SDK: API9 Release(3.2.11.9)
贡献代码
使用过程中发现任何问题都可以提 Issue 给我们,当然,我们也非常欢迎你给我们发 PR
开源协议
该项目基于 Apache License 2.0 ,请自由地享受和参与开源