fix Ox.sort so that it handles multiple numbers
This commit is contained in:
parent
b4fd0f01ae
commit
959a014657
1 changed files with 11 additions and 14 deletions
|
@ -411,22 +411,21 @@ Ox.range = function() {
|
||||||
|
|
||||||
function getSortValues(arr, fn) {
|
function getSortValues(arr, fn) {
|
||||||
var arr_ = fn ? arr.map(fn) : arr,
|
var arr_ = fn ? arr.map(fn) : arr,
|
||||||
len, matches = {}, sort = {};
|
len, matches = [], sort = {};
|
||||||
// find numbers
|
// find numbers
|
||||||
arr.forEach(function(val, i) {
|
arr.forEach(function(val, i) {
|
||||||
var match;
|
var match;
|
||||||
if (Ox.isString(val)) {
|
if (Ox.isString(val)) {
|
||||||
match = /\d+/.exec(arr_[i]);
|
match = arr_[i].match(/\d+/g);
|
||||||
matches[val] = match ? match[0] : '';
|
match && Ox.merge(matches, match);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
// get length of longest number
|
// get length of longest number
|
||||||
len = Ox.max(Ox.map(matches, function(val) {
|
len = Ox.max(Ox.map(matches, function(val) {
|
||||||
return val.length;
|
return val.length;
|
||||||
}));
|
}));
|
||||||
// pad numbers, make lowercase,
|
// make lowercase, remove leading non-word characters,
|
||||||
// remove leading non-word characters
|
// pad numbers and move leading articles to the end
|
||||||
// and move leading articles to the end
|
|
||||||
arr.forEach(function(val, i) {
|
arr.forEach(function(val, i) {
|
||||||
var val_ = arr_[i];
|
var val_ = arr_[i];
|
||||||
if (
|
if (
|
||||||
|
@ -436,16 +435,14 @@ Ox.range = function() {
|
||||||
) {
|
) {
|
||||||
sort[val] = null;
|
sort[val] = null;
|
||||||
} else if (Ox.isString(val_)) {
|
} else if (Ox.isString(val_)) {
|
||||||
sort[val] = (
|
sort[val] = val_.toLowerCase()
|
||||||
matches[val]
|
.replace(/^\W+/, '')
|
||||||
? val_.replace(
|
.replace(/\d+/g, function(match) {
|
||||||
matches[val], Ox.pad(matches[val], len)
|
return Ox.pad(match, len);
|
||||||
)
|
});
|
||||||
: val_
|
|
||||||
).toLowerCase().replace(/^\W+/, '');
|
|
||||||
Ox.forEach(['a', 'an', 'the'], function(article) {
|
Ox.forEach(['a', 'an', 'the'], function(article) {
|
||||||
var len;
|
var len;
|
||||||
if (new RegExp('^' + article + ' ', 'i').test(sort[val])) {
|
if (new RegExp('^' + article + ' ').test(sort[val])) {
|
||||||
len = article.length;
|
len = article.length;
|
||||||
sort[val] = sort[val].substr(len + 1) + ', '
|
sort[val] = sort[val].substr(len + 1) + ', '
|
||||||
+ sort[val].substr(0, len);
|
+ sort[val].substr(0, len);
|
||||||
|
|
Loading…
Add table
Reference in a new issue