私は答えを見つけました、私はそれをすべてに分けたかったのです。
var oldString = "This is just a sample of string to test the delta encoding. Infact, with my own login.dsfdsfdsfdsfsdfsdfdsfdsfsdfsdfds dsfds fds fddsf";
var newString = "dsfdsThissdf is just a sample of string to test X the dedsfdsflta encoding sdfds decoding. Infact, with my own sadsadsadsad"
var result = "";
var changes = getChanges(oldString, newString);
var string = getOriginal(oldString, changes);
function getChanges(os, ns) {
var addedIndex = false;
var changes = [];
var obj = [];
var oi = 0, ni = 0;
while (oi < oldString.length && ni < newString.length) {
if (newString.charAt(ni) != oldString.charAt(oi)) {
if (!addedIndex) {
obj.push(oi);
obj.push(newString.charAt(ni));
addedIndex = true;
}
else {
obj[1] += newString.charAt(ni);
}
ni++;
}
else {
if (addedIndex) {
changes.push(obj);
obj = [];
addedIndex = false;
}
oi++;
ni++;
}
};
if (addedIndex) {
changes.push(obj);
obj = [];
addedIndex = false;
}
obj = [];
if (ni == newString.length) {
obj.push(-1 * oi);
changes.push(obj);
}
if (oi == oldString.length) {
obj.push(ni);
obj.push(newString.substring(ni));
changes.push(obj);
}
return changes;
}
function getOriginal(os, changes) {
var result = os;
for (var i = changes.length - 1; i >= 0 ; i--) {
if (changes[i][0] < 0) {
result = result.substring(0, -1 * changes[i][0]);
}
else {
result = result.substring(0, changes[i][0]) + changes[i][1] + result.substring(changes[i][0]);
}
};
return result;
}
console.log(string);
console.log(newString);
あなたが何を求めているか分かりません。たぶんあなたはGoogleの "diff"をする必要があります..それはあなたが意味するものは...まあ、もしそれが人間の目のためにso__を見ても、それはささいなことです! [ここ](http://stackoverflow.com/questions/24887238/how-to-compare-two-rich-text-box-contents-and-highlight-the-characters-that-are/24970638?s=1参照) | 0.2755#24970638)実装では、diffingについて「非常に効率的」なものがないことを明確にすべきであり、誰も「ここにコードを置く」ことはできません。 – TaW
私はロジックを探して、古い文字列とデルタ(古いバージョンと新しいバージョンの違い)私は大規模な段落を簡単に転送できるように、デルタはおそらくサイズが小さくなければなりません。 –
幸運。あなたが助けを必要とするコードを持っているときに戻ってください。 – TaW