mirror of
https://github.com/haiwen/seahub.git
synced 2025-09-07 09:51:26 +00:00
modified compare of strings which have digits in them
This commit is contained in:
@@ -673,11 +673,48 @@ define([
|
|||||||
// both are english words
|
// both are english words
|
||||||
a_val = a_name.toLowerCase();
|
a_val = a_name.toLowerCase();
|
||||||
b_val = b_name.toLowerCase();
|
b_val = b_name.toLowerCase();
|
||||||
|
return this.compareStrWithNumbersIn(a_val, b_val);
|
||||||
}
|
}
|
||||||
|
|
||||||
return a_val >= b_val ? 1 : -1;
|
return a_val >= b_val ? 1 : -1;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// compare two strings which may have digits in them
|
||||||
|
// and compare those digits as number instead of string
|
||||||
|
compareStrWithNumbersIn: function(a, b) {
|
||||||
|
var reParts = /\d+|\D+/g;
|
||||||
|
var reDigit = /\d/;
|
||||||
|
var aParts = a.match(reParts);
|
||||||
|
var bParts = b.match(reParts);
|
||||||
|
var isDigitPart;
|
||||||
|
var len = Math.min(aParts.length, bParts.length);
|
||||||
|
var aPart, bPart;
|
||||||
|
|
||||||
|
if (aParts && bParts &&
|
||||||
|
(isDigitPart = reDigit.test(aParts[0])) == reDigit.test(bParts[0])) {
|
||||||
|
// Loop through each substring part to compare the overall strings.
|
||||||
|
for (var i = 0; i < len; i++) {
|
||||||
|
aPart = aParts[i];
|
||||||
|
bPart = bParts[i];
|
||||||
|
|
||||||
|
if (isDigitPart) {
|
||||||
|
aPart = parseInt(aPart, 10);
|
||||||
|
bPart = parseInt(bPart, 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aPart != bPart) {
|
||||||
|
return aPart < bPart ? -1 : 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Toggle the value of isDigitPart since the parts will alternate.
|
||||||
|
isDigitPart = !isDigitPart;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Use normal comparison.
|
||||||
|
return (a >= b) - (a <= b);
|
||||||
|
},
|
||||||
|
|
||||||
fileSizeFormat: function(bytes, precision) {
|
fileSizeFormat: function(bytes, precision) {
|
||||||
var kilobyte = 1024;
|
var kilobyte = 1024;
|
||||||
var megabyte = kilobyte * 1024;
|
var megabyte = kilobyte * 1024;
|
||||||
|
Reference in New Issue
Block a user