![]() |
|
||||||||||
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Подумаешь.
str = 'acacacbbbbddddacacacac';
trim = function (str, symbols) {
symbols = symbols.length ? symbols : ' ';
while (str.indexOf(symbols) == 0) {
str = str.substr(symbols.length);
}
while (str.lastIndexOf(symbols) == str.length-symbols.length) {
str = str.substr(0, str.length-symbols.length);
}
return str;
};
trim2 = function (str, symbol) {
if (lastStr != str) {
lastStr = str;
symbol = symbol ? symbol : ' ';
var array:Array = str.split(symbol);
var sx:Number = 0;
var ex:Number = array.length;
while (array[sx] == "") {
sx++;
}
while (array[ex-1] == "") {
ex--;
}
array.splice(ex);
array.splice(0, sx);
str = array.join(symbol);
outStr = str;
return str;
} else {
return outStr;
}
};
function trims(str:String, symbol:String):String {
symbol = symbol.length ? symbol : ' ';
var array:Array = str.split(symbol);
var sx:Number = 0;
var ex:Number = array.length;
while (array[sx] == "") {
sx++;
}
while (array[ex-1] == "") {
ex--;
}
array.splice(ex);
array.splice(0, sx);
str = array.join(symbol);
return str;
}
////////
t = getTimer();
for (var i = 0; i<10000; i++) {
trim(str, 'ac');
}
trace(trim(str, 'ac'));
trace(getTimer()-t);
t = getTimer();
for (var i = 0; i<10000; i++) {
trim2(str, 'ac');
}
trace(trim2(str, 'ac'));
trace(getTimer()-t);
t = getTimer();
for (var i = 0; i<10000; i++) {
trims(str, 'ac');
}
trace(trims(str, 'ac'));
trace(getTimer()-t);
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Выжал ещё 150 мс:
str = 'acacacbbbbddddacacacac';
trim = function(str, symbol) {
symbol = symbol ? symbol : ' ';
var array = str.split(symbol);
var sx = 0;
var ex = array.length;
while (array[sx] == "") {
sx++;
}
while (array[ex-1] == "") {
ex--;
}
str = array.splice(sx,ex-sx).join(symbol);
return str;
}
////////
t = getTimer();
for (var i = 0; i<10000; i++) {
trim(str, 'ac');
}
trace(trim(str, 'ac'));
trace(getTimer()-t); // 831
|
|
|||||
|
Да клева, тут согласен что в 20 раз быстрее первоначального, хотя мне кажется нужно нормально потестить, бо к примеру если одну комбинацию надо убрать, то тут с массивами не быстрее будет, но надо тестить.
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
И ещё 170 мс:
str = 'acacacbbbbddddacacacac';
trim = function (str, symbol) {
symbol = symbol ? symbol : ' ';
var array = str.split(symbol);
var sstr = array.shift();
var estr = array.pop();
while (sstr == "") {
sstr = array.shift();
}
while (estr == "") {
estr = array.pop();
}
var tmp = estr && sstr ? symbol : '';
if (array.length) {
tmp = symbol+array.join(symbol)+symbol;
return sstr+tmp+estr;
}
return sstr+tmp+(estr ? estr : '');
};
t = getTimer();
for (var i = 0; i<10000; i++) {
trim(str, 'ac');
}
trace(trim(str, 'ac'));
trace(getTimer()-t); // 658
Последний раз редактировалось etc; 19.04.2007 в 13:42. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Измерь
![]() trims = function (str, symbol) {
symbol = symbol ? symbol : ' ';
var array = str.split (symbol);
var sstr = array.shift ();
var estr = array.pop ();
while (estr == "") {
estr = array.pop ();
}
while (sstr == "") {
sstr = array.shift ();
}
var tmp = estr && sstr ? symbol : '';
if (array.length) {
tmp = symbol + array.join (symbol) + symbol;
return sstr + tmp + estr;
}
return sstr + tmp + (estr ? estr : '');
};
|
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Тогда уж:
str = 'acacacbbbbddddacacacac';
trim = function (str, symbol) {
symbol = symbol ? symbol : ' ';
var array = str.split(symbol);
var estr = array.pop();
var sstr = array.shift();
while (estr == "") {
estr = array.pop();
}
while (sstr == "") {
sstr = array.shift();
}
if (array.length) {
return sstr+symbol+array.join(symbol)+symbol+estr;
}
return (sstr && estr ? sstr+symbol+estr : (estr ? estr : ''));
};
t = getTimer();
for (var i = 0; i<10000; i++) {
trim(str, 'ac');
}
trace(trim(str, 'ac'));
trace(getTimer()-t); // 580—610
Последний раз редактировалось etc; 19.04.2007 в 14:31. |
|
|||||
|
Негуру
администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
|
Если кто-то еще следит, за тем как мы ерундой вдвоем страдаем
и кто не понял, что нового в последних двух постах, объясняю: мы поменяли местами pop и shift. То есть сначала убрали символы с конца, а потом сначала и это дало результат ![]() |
|
|||||
|
Et cetera
Регистрация: Sep 2002
Сообщений: 30,787
|
Да, я ещё убрал лишнюю проверку и ещё 20 мс выцепил.
|
|
|||||
|
Регистрация: Oct 2006
Адрес: spb.ru
Сообщений: 3,221
|
А кто будет переводы строк вырезать?
function trim(s:String):String{
if( s==undefined || s=="" ) return "" ;
var mx:Number, i:Number;
for ( mx = s.length-1; mx > 0; mx--) if ( s.charCodeAt(mx) > 32) break;
for (i = 1; i < mx; i++) if (s.charCodeAt(i) > 32) break;
return s.slice(i, mx+1);
}
trace (">>" + trim( " \n\taassddfegkl\t\t \n ")+ "<<");
с пробелами ессно больше Последний раз редактировалось Kikasso; 19.04.2007 в 14:43. |
![]() |
![]() |
Часовой пояс GMT +4, время: 03:07. |
|
|
« Предыдущая тема | Следующая тема » |
|
|