PDA

Просмотр полной версии : Два разных массива из двух одинаковых стрингов


gesecond
06.10.2007, 16:53
Как можно сравнить два массива, если


t = 0;
k = 0;
arr1 = new Array();
arr2 = new Array();
primer.text = "\n\tone\n\ttwo";
perem2 = "\n\tone\n\ttwo";
perem1 = primer.text;
function simpl() {
for (i=0; i<perem1.length; i++) {
if (perem1.charAt(i) != "\n" && perem1.charAt(i) != "\t") {
arr1[t] = perem1.charAt(i);
t++;
}
if (perem2.charAt(i) != "\n" && perem2.charAt(i) != "\t") {
arr2[k] = perem2.charAt(i);
k++;
}
}
}
simpl();
trace(arr1);
//output ,o,n,e,
//,t,w,o
trace(arr2);
//output o,n,e,t,w,o


два "одинаковых" стринга дают разные массивы из-за "\n"

DarkLight
06.10.2007, 17:09
С помощью операций String.split - Array.join избавиться от мешающих символов перед преобразованием в массив и сравнением, либо в функции сравнения создать массивы без этих символов из исходных, и сравнивать их.

Mnilionic
06.10.2007, 17:10
if (perem2 == perem1) {
trace("стринги одинаковые");
} else {
trace("видимо стринги неодинаковые");
}

gesecond
06.10.2007, 17:19
Вот только пользователь будет менять input текст - одни символы на другие. А разбивка на абзацы должна оставаться и общее число символов не меняется. Так что сравнивать переменные стринги нельзя - только элементы массивов.

Пробовал и String.split, но оно как-то неадекватно реагирует на \n

Mnilionic
06.10.2007, 17:29
добавте к вашему коду проверку на \r и, в принципе будет работать.


primer.text = "\n\tone\n\ttwo";
perem2 = "\n\tone\n\ttwo";
perem1 = primer.text;

function strsplit(str){
var result:Array = [];
for (var i=0; i<str.length; i++) {
if (str.charAt(i) != "\n" && str.charAt(i) != "\t" && str.charAt(i) != "\r") {
result.push(str.charAt(i));
}
}
return result;
}

trace(strsplit(perem2))
trace(strsplit(perem1))

gesecond
06.10.2007, 17:35
Ура! Работает! А что такое \r ?

О, сообразил. Спасибо за ответ

etc
06.10.2007, 20:26
gesecond в следующий раз за неумение редактировать посты для добавления мысли буду наказывать.