Jak*_*mpl 16 javascript google-diff-match-patch
我正在使用diff_mainGoogle的DiffMatchPatch库的方法来获取差异,然后我在我的应用程序中使用.考虑这种情况:
旧字符串:
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Run Code Online (Sandbox Code Playgroud)
新字符串:
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c;
};
Run Code Online (Sandbox Code Playgroud)
我得到的加法差异是:
;
};
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c
Run Code Online (Sandbox Code Playgroud)
然而,对于人类消费来说,似乎更合理的差异是:
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c;
};
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让DiffMatchPatch产生第二个结果而不是第一个结果?
你可以在这里看到一个例子:https://jsfiddle.net/puje78vL/1/
我已经创建了一个JSFiddle基于库的作者示例页面(假设您需要基于问号标签的Javascript版本).
并使用此代码将给我你所期望的:
var dmp = new diff_match_patch();
function launch() {
var text1 = document.getElementById('text1').value;
var text2 = document.getElementById('text2').value;
var d = dmp.diff_main(text1, text2);
var ds = dmp.diff_prettyHtml(d);
document.getElementById('outputdiv').innerHTML = ds;
}
Run Code Online (Sandbox Code Playgroud)
您还可以查看控制台并查看原始答案(数组),您还可以看到它diff_main正在返回您期望的内容.你在做一些不同的事吗?如果是这样,请分享您的代码.
新信息
现在你提供了全文我可以给你一个更好的答案:你看到的结果是好的,它只是算法的工作方式
我会试着向你解释发生了什么,以及如何解决这个问题.我们来看看每个文本的最后部分:
文字1
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Run Code Online (Sandbox Code Playgroud)
文字2
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};
Tracker.autorun = function (f) {
constructingComputation = true;
var c = new Tracker.Computation(f);
return c;
};
Run Code Online (Sandbox Code Playgroud)
让我们注意这一点:
changed函数后面没有回车符.changed上的函数的后面有回车符.autorun函数后面没有回车符.这样计算的diff算法将匹配1带3,使2所添加的文本.这就是tou获得输出的原因.
现在,为了获得所需的输出,您需要1与之匹配2.这意味着在文本1的末尾添加一个新的空行,您可以在巡视更新时看到JSFIddle:
Tracker.Dependency.prototype.changed = function () {
for (var id in this._dependentsById)
this._dependentsById[id]._compute();
};[PRESS ENTER HERE TO ADD NEW LINE]
Run Code Online (Sandbox Code Playgroud)
请注意,如果您只使用此文本,算法将正常工作(正如我在原始答案中所示).这是在你开始发生这种混淆时添加更多文本之后,不确定原因.
| 归档时间: |
|
| 查看次数: |
1751 次 |
| 最近记录: |