27.08.2013, 15:19
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
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 одинаковых слова
Последний раз редактировалось tsigel, 27.08.2013 в 16:13.
|
|
27.08.2013, 15:49
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Сообщение от tsigel
|
И ещё, мой алгоритм не выводит в первом массиве 2 одинаковых слова
|
А, вообще, почему из первого массива должно что-то выводится?
____________
Сообщение от tsigel
|
Есть 2 текста, по идее эти тексты должны не сильно отличаться друг от друга. Задача найти изменения в этом тексте и выделить цветом.
|
"в этом тексте" - в каком именно: в 1-ом или 2-ом или в обоих сразу?
Приведите примеры.
Последний раз редактировалось Demath, 27.08.2013 в 15:52.
|
|
27.08.2013, 15:52
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Не совсем. На странице представлены 2 версии документа. text1 текст данного поля из более старой версии, text2 - соответственно более новой. Необходимо цветом выделить изменения в обоих документах. И в старом и в новом. Чтобы оператор при работе с ними не искал читая одинаковые документы.
|
|
27.08.2013, 15:54
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
У документов есть поля для редактирования, так что функция не должна быть рассчитана на обработку больших количеств текста за 1 заход.
Оптимизация и скорость работы тоже не волнует, т.к. Функция запускается однократно при загрузке страницы.
|
|
27.08.2013, 15:59
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Например, для
var text1 = "Мама мыла очень кривую раму";
var text2 = "Мама долго мыла кривую раму";
какие слова нужно вывести?
|
|
27.08.2013, 16:07
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Demath,
Для данных текстов:
text1 = "Мама мыла <span class='changedText'>очень</span> кривую раму"
text2 = "Мама <span class='changedText'>долго</span> мыла кривую раму"
И из первого исчезло "очень", мы его выделяем, а во втором добавилось "долго", его мы тоже выделяем.
Удивительно, но скрипт выше правильно отрабатывает данные тексты
По идее, если бы тексты были такие:
var text1 = "Мама мыла кривую раму";
var text2 = "Мама мыла раму";
То необходимо было бы в первом тексте выделить "кривую", а второй оставить неизменным.
Последний раз редактировалось tsigel, 27.08.2013 в 16:14.
|
|
27.08.2013, 16:23
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Сообщение от Demath
|
Сообщение от tsigel
|
И ещё, мой алгоритм не выводит в первом массиве 2 одинаковых слова
|
А, вообще, почему из первого массива должно что-то выводится?
|
Есть документ, пользователь может посмотреть изменения этого документа. При просмотре у него на экране 2 версии одного документа, слева старая, справа - новая.
Сообщение от Demath
|
Сообщение от tsigel
|
Есть 2 текста, по идее эти тексты должны не сильно отличаться друг от друга. Задача найти изменения в этом тексте и выделить цветом.
|
"в этом тексте" - в каком именно: в 1-ом или 2-ом или в обоих сразу?
|
Изменения надо подсвечивать в 2х документах.
|
|
27.08.2013, 16:24
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Прошу прощения если непонятно объясняю.
|
|
27.08.2013, 16:26
|
|
Профессор
|
|
Регистрация: 22.06.2012
Сообщений: 168
|
|
Почитайте перед сном симметрическая разность
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) );
|
|
27.08.2013, 16:30
|
Профессор
|
|
Регистрация: 12.12.2012
Сообщений: 1,398
|
|
Demath,
Спасибо за ответ, учу матчасть!
|
|
|
|