¬ы можете использовать пользовательскую функцию заказа так:
negative, 0, positive
‘ункци¤ провер¤ет, равны ли значени¤ числа, и если да, то возвращаетс¤ к лексикографическому упор¤дочению дл¤ сортировки символов 0ixes. ≈сли в равном случае нет суффиксов, следовательно, независимо от того, в каком пор¤дке возвращаютс¤ числа. ≈сли только один из операндов имеет суффикс, голый номер возвращает отрицательный. ≈сли значени¤ числа не равны, функци¤ просто возвращает тристат, т. ≈. оторый будет оцениватьс¤ одним из . »ли на самом деле это Ђбистаутї, так как мы уже обрабатывали дело.var numbers = ['1', '1-r', '1+q', '1', '2', '2+q', '2-r', '10']; function suffixSort (suff, asc) { asc = 2 * +(!!asc) - 1; // Convert boolean to -1 or 1 return function (a, b) { var _a = parseFloat(a), // Extract the number value _b = parseFloat(b), aSI = -(a.length - _a.toString().length), // Get the index of suffix start bSI = -(b.length - _b.toString().length); // Equal number values, sort by suffixes if (_a === _b) { return (suff.indexOf(a.substr(aSI)) > suff.indexOf(b.substr(bSI))) ? 1 : -1; } // Inequal number values, sort by numbers return asc * (_a - _b); } } // suffixSort arguments // suff: An array of the suffix strings to sort, ordered in the desired sorting order // asc: true = ascending, false = descending. Optional, defaults to descending sort numbers.sort(suffixSort(['+q', '-r'], true)); console.log(numbers);
suffixSort
0
Ѕолее общее решение
¬ышеприведенный код скорее ¤вл¤етс¤ особым случаем только дл¤ двух разных одиночных суффиксов. ≈сли суффиксы более сложны, вот более общий код дл¤ сортировки по числу и суффиксам:
suff
»де¤ состоит в том, чтобы хранить суффиксы в массиве, и когда необходима сортировка суффиксов, функци¤ сравнивает индексы массива суффиксов вместо самих суффиксов.
praseInt
позвол¤ет также определить направление сортировки. ¬ыбранное направление сортировки не вли¤ет на сортировку суффиксов, они всегда возвращаютс¤ в пор¤дке их по¤влени¤ в suff
массиве.