var text1 = "Мама мыла очень кривую раму";
var text2 = "Мама долго мыла кривую раму";
var arr1 = text1.split(' ');
var arr2 = text2.split(' ');
var result1 = [], result2 = [];
for (var i = 0; i < arr1.length; i++) {
if (arr2[i] == undefined) {
for (var j = i; j < arr1.length; j++) {
arr1[j] = "<span class='changedText'>" + arr1[j] + "</span>";
}
break;
}
if (arr1[i] != arr2[i]) {
if (findInArray(arr1[i], arr2)) {
arr1.splice(i, 0, arr1[i]);
arr2[i] = "<span class='changedText'>" + arr2[i] + "</span>";
if (result1[result1.length - 1] != arr1[i])
result1.push(arr1[i]);
result2.push(arr2[i]);
} else {
arr2.splice(i, 0, arr2[i]);
arr1[i] = "<span class='changedText'>" + arr1[i] + "</span>";
result1.push(arr1[i]);
}
} else {
if (result1[result1.length - 1] != arr1[i])
result1.push(arr1[i]);
result2.push(arr2[i]);
}
}
function findInArray (element, array) {
var find = false;
for (var i = 0; i < array.length; i++) {
if (array[i] == element)
find = true;
}
return find;
}
alert(result1.join(' '));
alert(result2.join(' '));
Вроде работает, но есть косяки: Не придумал что делать если новый текст длиннее исходного (я пробегаюсь только по исходному массиву). keen, Как Вы и говорили косяки со знаками препинания. Вроде это можно сделать регулярными выражениями, но в них я не силен, как бы мне выделить в отдельные элементы массива знаки препинания так, чтобы потом оно нормально склеилось в строку и не потерять при этом знаки? И ещё, мой алгоритм не выводит в первом массиве 2 одинаковых слова :( |
Цитата:
____________ Цитата:
Приведите примеры. |
Не совсем. На странице представлены 2 версии документа. text1 текст данного поля из более старой версии, text2 - соответственно более новой. Необходимо цветом выделить изменения в обоих документах. И в старом и в новом. Чтобы оператор при работе с ними не искал читая одинаковые документы.
|
У документов есть поля для редактирования, так что функция не должна быть рассчитана на обработку больших количеств текста за 1 заход.
Оптимизация и скорость работы тоже не волнует, т.к. Функция запускается однократно при загрузке страницы. |
Например, для
var text1 = "Мама мыла очень кривую раму"; var text2 = "Мама долго мыла кривую раму"; какие слова нужно вывести? |
Demath,
Для данных текстов: text1 = "Мама мыла <span class='changedText'>очень</span> кривую раму" text2 = "Мама <span class='changedText'>долго</span> мыла кривую раму" И из первого исчезло "очень", мы его выделяем, а во втором добавилось "долго", его мы тоже выделяем. Удивительно, но скрипт выше правильно отрабатывает данные тексты :blink: :) По идее, если бы тексты были такие: var text1 = "Мама мыла кривую раму"; var text2 = "Мама мыла раму"; То необходимо было бы в первом тексте выделить "кривую", а второй оставить неизменным. |
Цитата:
Цитата:
|
Прошу прощения если непонятно объясняю.
|
Почитайте перед сном симметрическая разность :)
function DiffArrays(A,B)
{
var M = A.length, N = B.length, C = [];
for (var i=0; i<M; i++)
{ var j = 0;
while (B[j]!==A[i] && j<N) j++;
if (j==N) C[C.length] = A[i];
}
return C;
}
function SymmDiffArrays(A,B)
{
return DiffArrays(A,B).concat( DiffArrays(B,A) );
}
var text1 = "Мама мыла очень кривую раму",
text2 = "Мама долго мыла кривую раму",
arr1 = text1.split(' '),
arr2 = text2.split(' ');
alert( SymmDiffArrays(arr1, arr2) );
|
Demath,
Спасибо за ответ, учу матчасть! :write: |
| Часовой пояс GMT +3, время: 00:33. |