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, время: 07:39. |