Java



           

Сортировка таблицы средствами JavaScript - часть 2


Разберем данные по строкам. Во второй строке вызывается функция upCs с параметром authors и пробелом в качестве второго параметра. Функция upCs создает заглавные буквы в начале строки и перед каждым вхождением второго аргумента. Эта функция была написана исключительно потому, что не все обрабатывают данные должным образом и вполне могут написать имя писателя, например, с маленькой буквы. Применение такой функции устраняет возможную ошибку программиста в заполнении массива данными, а также позволяет быть уверенным, что в функции сортировки не будет неверного сравнения заглавных букв со строчными. Впрочем, если вы уверены в том, что данные будут занесены верно, можете убрать вызовы этой функции:

Листинг 2:

1 function upCs( str, param ) { 2 var tmpStr = str.substring( 0, 1 ).toUpperCase() + str.substring( 1 ); 3 if( !param ) 4 return tmpStr; 5 var separator = tmpStr.indexOf( param ); 6 var retStr = tmpStr; 7 if( separator != -1 ) 8 retStr = tmpStr.substring( 0, separator ); 9 10 while( separator != -1 ) { 11 tmpStr = tmpStr.substr( separator + 1, 1 ).toUpperCase() + tmpStr.substring( separator + 2 ); 12 separator = tmpStr.indexOf( param ); 13 if( separator != -1 ) 14 retStr += param + tmpStr.substring( 0, separator ); 15 else 16 retStr += param + tmpStr; 17 } 18 19 return retStr; 20 }

Эта же функция, вызванная с пустым вторым аргументом, возвращает результат с заглавной буквой только в начале строки. Теперь обратимся к строке 7, листинга 1. Здесь вызывается функция weight, которая возвращает числовые значения каждого символа аргумента в виде массива. Для чего я ее написал? Дело в том, что коды символов русского алфавита в браузере идут последовательно, кроме кода символа буквы "ё". Код этого символа больше кодов символов остального алфавита, поэтому приходится присваивать такое "весовое" значение этому символу, которое соответствовало бы его позиции в алфавите. Вот код этой функции:

Листинг 3:

1 function weight( str ) { 2 var retArray = new Array(); 3 4 for( var i = 0; i < str.length; i++ ) { 5 var tmp = str.charCodeAt( i ); 6 if( tmp >= 1046 && tmp < 1078 ) 7 tmp++; 8 else if( tmp == 1025 ) 9 tmp = 1046; 10 else if( tmp >= 1078 ) 11 tmp++; 12 else if( tmp == 1105 ) 13 tmp = 1078; 14 retArray[ i ] = tmp; 15 } 16 17 return retArray; 18 }




Содержание  Назад  Вперед