Здравствуйте.
Перед нами задача отсортировать массив строк, в 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 комментарий:
быдлокод
Отправить комментарий