вторник, 20 октября 2009 г.

Сортировка массивов методом Array.sort


Здравствуйте.
Перед нами задача отсортировать массив строк, в JavaScript существует метод для этого, и звать его Array.sort(),
Сортировка работает с помощью дополнительного, не обязательного параметра, без него метод будет сортировать по возрастанию значения элементов, например
['bb','a','c'].sort() -> ['a','bb','c'].
Посему написал несложную функцию для сортировки строк.

function StrSortByLength(arr,ASC_DESC){
 if(typeof(arr) ==  'string')arr = arr.split(' ');
 var cmp = function(a,b) {
  return a.length < b.length?-1:(a.length > b.length?1:0);   
 }
 return ASC_DESC=='DESC'?arr.sort(cmp).reverse():arr.sort(cmp); 
}
StrSortByLength(['bb','a','c']) // ['a','c','bb']
//или 
StrSortByLength('bb a c') // ['a','c','bb']

В первой строке ф-ции определяем тип передаваемого значения, если это строка то метод split(' ') разбивает ее на массив слов.

Суть функции cmp проста, принимает два аргумента(a,b) и возвращает:

a < b: Отрицательное значение.
a = b: Ноль 
a > b: Положительное значение.

Тесть функцию можно приспособить для своих нужд,
например мне нужно было отсортировать объекты по значению speed:

var _cmp = function (a,b) { 
 if (a.speed < b.speed)  return -1;
 if (a.speed > b.speed)  return 1;
 if (a.speed==b.speed) return 0; 
}; 

Второй параметр моей функции "ASC_DESC" при его отсутствии или значении не равному "DESC" сортировка происходит по возростанию -> ['a','c','bb']
если StrSortByLength('bb a c','DESC') // ["bb", "c", "a"]
Делается это очень просто, так-как массив уже отсортирован, необходимо лишь перевернуть элементы массива, методом reverse().
Надеюсь кому то пригодится. спасибо, Удачи :)

1 комментарий:

jt3k комментирует...

быдлокод