рдХреНрд░рдордмрджреНрдз рдХрд░рдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рд╢рд╛рдпрдж рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рджреНрд╡рд╛рд░рд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╣рд▓ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЗрддрдиреЗ рд╡реНрдпрд╛рдкрдХ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдирд╣реАрдВ рд╣реИрдВ рдФрд░ рдЙрди рд╕рднреА рдХреЛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдФрд░ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд╕реЙрд░реНрдЯрд▓рд┐рд╕реНрдЯ () рдФрд░ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рд╕рдорд╛рди рддрд░реАрдХреЗ рдлреНрд▓реИрд╢ рд╣реЛрддреЗ рд╣реИрдВред рд╢рд╛рдпрдж, рд╣рдо рдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдиреЗ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЫрдВрдЯрд╛рдИ рдХреЗ рдмреБрд▓рдмреБрд▓реЗ рд▓рд┐рдЦреЗ рдФрд░ рд╕реЛрдЪрд╛ рдХрд┐ рдпрд╣ рдкрд╣рд▓реА рдмрд╛рд░ рдХрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдЫрдБрдЯрд╛рдИ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рддреБрдЪреНрдЫ рд╣реИ - рдмрд╕ рд╢реБрд░реБрдЖрдд рд╕реЗ рдкрд╣рд▓реЗ рд╡рд┐рднрд┐рдиреНрди рдкрд╛рддреНрд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВред рдФрд░ рдЕрдЧрд░ рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдирдВрдмрд░ рд╣реИрдВ? рдлрд┐рд░ рдпрд╣ рд╕реЙрд░реНрдЯрд┐рдВрдЧ (
lexicographic ) рдЕрдиреБрдХреНрд░рдо ['file2', 'file10', 'file1'] рдХреЛ ['file1', 'file10', 'file2'] рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдПрдХ рд╡реНрдпрдХреНрддрд┐ рдкрд╛рда рдкрдврд╝рддреЗ рд╕рдордп рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдорд╛рдирддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реА рдХреНрд░рдо, рд╕рд╣рдЬ рд░реВрдк рд╕реЗ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛, рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ: ['file1', 'file2', 'file10']ред рдЗрд╕ рддрд░рд╣ рдХреА рдЫрдБрдЯрд╛рдИ рдХреЛ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдЫрдБрдЯрд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдХрдЯреМрддреА рдХреЗ рддрд╣рдд -
рдмрд╛рдЗрдХ рдХреЗ рд▓рд┐рдП
рдПрдХ рд╡рд┐рд╕реНрддреГрдд рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдПрд▓реНрдЧреЛрд░рд┐рджрдоред рдпрд╣ рдЗрд╖реНрдЯрддрдорддрд╛ рдФрд░ рд╕реБрдВрджрд░рддрд╛ рдХрд╛ рдвреЛрдВрдЧ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдПрдХ рдмрд╣реБ-рдкрд╛рд╕ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди "рд╣реЗрдб-рдСрди" рд╕реЗ рдмреЗрд╣рддрд░ рд╣реИред
рд╣рдо рд╕реНрд╡рдпрдВ рдЫрдБрдЯрд╛рдИ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рд▓рд┐рдЦреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд Array.sort () рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рд▓рд┐рдП, "рдореБрдЦреНрдп рдХрд╛рд░реНрдп" рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:
function naturalSort(stringArray) {
var arr = stringArray;
// ...
return arr.sort(compareStrings) //
}
рдпрд╣ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрдВрдХреНрд╢рдирд╕реНрдЯреНрд░реАрдо () рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рд░рд╣рддрд╛ рд╣реИред рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрд░реЗ рд▓рд┐рдП рд╣реБрдЖ: рд╣рдо рд▓рд╛рдЗрдиреЛрдВ рдореЗрдВ рдкрд╛рда рд╕реЗ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рд╕реВрдЪрдХрд╛рдВрдХ рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрдиреЛрдВ (рдпрд╛ рд╕рдВрдЦреНрдпрд╛рдУрдВ) рдХреЗ рдмреАрдЪ рдкрд╣рд▓реЗ рдЕрдВрддрд░ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВред рд╕реНрдкреНрд▓рд┐рдЯрд╕реНрдЯреНрд░рд┐рдВрдЧ () рдлрд╝рдВрдХреНрд╢рди (рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж) рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░ рджреЗрдЧрд╛, рдФрд░ рддреБрд▓рдирд╛ рд╕реНрд╡рдпрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:
function compareStrings(str1, str2) {
//
var compare = function (a, b) {
return (a < b) ? -1 : (a > b) ? 1 : 0;
};
// ; splitString()
var parts1 = splitString(str1);
var parts2 = splitString(str2);
//
var minLength = Math.min(parts1.length, parts2.length);
for ( var i = 0; i < minLength; i++) {
//
}
//
// , "", , ""
return compare(parts1.length, parts2.length);
}
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╕рд╛рде рд╕рдм рдХреБрдЫ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рд╣реИ: рдЕрдзрд┐рдХрд╛рдВрд╢ рд░реЗрдЦрд╛рдПрдВ рдЬрд┐рдирдХреА рддреБрд▓рдирд╛ рдкрд╣рд▓реЗ рд╡рд░реНрдгреЛрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реЛрддреА рд╣реИ, рдпрд╛рдиреА рд╕реНрдкреНрд▓рд┐рдЯрд╕реНрдЯреНрд░рд┐рдВрдЧ () рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХрд╛рдо рдХрд░рддреА рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдЖрд╕реНрдердЧрд┐рдд рдЧрдгрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдареАрдХ рд╣реИ - рд╕реНрдкреНрд▓рд┐рдЯрд╕реНрдЯреНрд░рд┐рдВрдЧ () рдПрдХ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕рд░рдгреА рдХреЛ рд╡рд╛рдкрд╕ рди рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд▓реЗ () рдФрд░ рдЧрдгрдирд╛ () рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рд╡рд╕реНрддреБред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдВрдж рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдерд╛:
(рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ
рдпреВрдкреАрдбреА )
function splitString(str) {
var from = 0; // slice()
var index = 0; //
var count = 0; //
var splitter = {}; //
//
splitter.count = function () {
return count;
}
//
splitter.next = function () {
// - null
if (index === str.length) {
return null ;
}
//
while (++index) {
var currentIsDigit = isDigit(str.charAt(index - 1)); // isDigit()
var nextChar = str.charAt(index);
var currentIsLast = (index === str.length);
// - ,
// ( / )
var isBorder = currentIsLast ||
xor(currentIsDigit, isDigit(nextChar)); // xor()
if (isBorder) {
var part = str.slice(from, index);
from = index;
count++;
return {
IsNumber: currentIsDigit,
Value: currentIsDigit ? Number(part) : part
};
} // end if
} // end while
}; // end next()
return splitter;
}
рд╣рдо рд╕рд╣рд╛рдпрдХ рдХрд╛рд░реНрдп рд▓рд┐рдЦреЗрдВрдЧреЗ - xor () рдФрд░ isDigit ():
function xor(a, b) {
return a ? !b : b;
}
function isDigit(chr) {
var charCode = function (ch) {
return ch.charCodeAt(0);
};
var code = charCode(chr);
return (code >= charCode( '0' )) && (code <= charCode( '9' ));
}
рдЕрдм рд╡рд╛рдкрд╕ рд╕реНрдЯреНрд░рд┐рдВрдЧ рддреБрд▓рдирд╛ рдлрд╝рдВрдХреНрд╢рди рддреБрд▓рдирд╛ () рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рд╛рде, рд╕рд╛рдорд╛рдиреНрдп рддрд░реНрдХ рдмрд╣реБрдд рдмрджрд▓ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИ:
(рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ
рдпреВрдкреАрдбреА )
function compareStrings(str1, str2) {
//
var compare = function (a, b) {
return (a < b) ? -1 : (a > b) ? 1 : 0;
};
//
var splitter1 = splitString(str1);
var splitter2 = splitString(str2);
//
while ( true ) {
var first = splitter1.next();
var second = splitter2.next();
// ...
if ( null !== first && null !== second) {
// ( )
if (xor(first.IsNumber, second.IsNumber)) {
// ""
return first.IsNumber ? -1 : 1;
//
} else {
var comp = compare(first.Value, second.Value);
if (comp != 0) {
return comp;
}
} // end if
// ... - ""
} else {
return compare(splitter1.count(), splitter2.count());
}
} // end while
}
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдЫрдБрдЯрд╛рдИ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рд╕рднреА рдХреЛ рдПрдХ рд╕рд╛рде рд░рдЦрддреЗ рд╣реИрдВ рдФрд░ рдХреЛрдб рдХреЛ "рдХрдВрдШреА" рдХрд░рддреЗ рд╣реИрдВ:
(рдкреЛрд╕реНрдЯ рдХреЗ рдЕрдВрдд рдореЗрдВ
рдпреВрдкреАрдбреА )
function naturalSort(stringArray) {
// ""
var xor = function (a, b) {
return a ? !b : b;
};
// ,
var isDigit = function (chr) {
var charCode = function (ch) {
return ch.charCodeAt(0);
};
var code = charCode(chr);
return (code >= charCode( '0' )) && (code <= charCode( '9' ));
};
//
var splitString = function (str) {
var from = 0; // slice()
var index = 0; //
var count = 0; //
var splitter = {}; //
//
splitter.count = function () {
return count;
}
//
splitter.next = function () {
// - null
if (index === str.length) {
return null ;
}
//
while (++index) {
var currentIsDigit = isDigit(str.charAt(index - 1));
var nextChar = str.charAt(index);
var currentIsLast = (index === str.length);
// - ,
// ( / )
var isBorder = currentIsLast ||
xor(currentIsDigit, isDigit(nextChar));
if (isBorder) {
var part = str.slice(from, index);
from = index;
count++;
return {
IsNumber: currentIsDigit,
Value: currentIsDigit ? Number(part) : part
};
} // end if
} // end while
}; // end next()
return splitter;
};
// ""
var compareStrings = function (str1, str2) {
//
var compare = function (a, b) {
return (a < b) ? -1 : (a > b) ? 1 : 0;
};
//
var splitter1 = splitString(str1);
var splitter2 = splitString(str2);
//
while ( true ) {
var first = splitter1.next();
var second = splitter2.next();
// ...
if ( null !== first && null !== second) {
// ( )
if (xor(first.IsNumber, second.IsNumber)) {
// ""
return first.IsNumber ? -1 : 1;
//
} else {
var comp = compare(first.Value, second.Value);
if (comp != 0) {
return comp;
}
} // end if
// ... - ""
} else {
return compare(splitter1.count(), splitter2.count());
}
} // end while
}
//
var arr = stringArray;
return arr.sort(compareStrings);
}
рдореИрдВ рдХреЛрдб рдХреЗ рд▓рд┐рдП рдмрдЧ, рдЯрд┐рдкреНрд╕ рдФрд░ рд╕реБрдЭрд╛рд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЛ рджрд┐рд▓рдЪрд╕реНрдкреА рдереА, рдФрд░ рд╢рд╛рдпрдж рдЙрдкрдпреЛрдЧреА рднреАред
рдпреБрдкреАрдбреА:рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ,
Alex_At_Net рдиреЗ рдиреЛрдЯ рдХрд┐рдпрд╛ рдХрд┐ рд▓рд╛рдЗрди
рдмреНрд░реЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдХреИрд╢ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛, рдФрд░
рд╕реНрдЯреИрдВрдбреА рдиреЗ рддреБрд░рдВрдд рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рддреЛрдбрд╝рдиреЗ рдФрд░ рдЯреБрдХрдбрд╝реЛрдВ рдХреЗ рддреИрдпрд╛рд░ рдХрд┐рдП рдЧрдП рд╕реЗрдЯреЛрдВ рдХреЛ рдЫрд╛рдВрдЯрдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╕рдВрд╢реЛрдзрд┐рдд рдФрд░ рд╕рдВрд╡рд░реНрдзрд┐рдд рд╕рдВрд╕реНрдХрд░рдг рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ред рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдЪрд┐рдордЯрд╛ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ - рдПрдХ рдордирдорд╛рдирд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХрд╛рд░реНрдп: рдЕрдм рдЖрдк рдХрд┐рд╕реА рднреА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрдирдкреБрдЯ рдРрд░реЗ рдХреЛ рддреБрд░рдВрдд рд╕реНрдкреНрд▓рд┐рдЯрд░реНрд╕ рдХреЗ рдПрдХ рд╕рд░рдгреА рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдВрдЯрд╡рд╛рд░рд╛ рдХреЗрд╡рд▓ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдПрдХреНрд╕реЗрд╕ рдХрд░рдирд╛, рдХреЗрд╡рд▓ рд╕рд╣реА рдЬрдЧрд╣ рдкрд░ рдФрд░ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ред рдЕрдЧрд▓реА () рд╡рд┐рдзрд┐ рдХреЗ рдмрдЬрд╛рдп, рдлрд╛рдбрд╝рдиреЗрд╡рд╛рд▓рд╛ рдХреЗ рдкрд╛рд╕ рдЕрдм рдПрдХ рднрд╛рдЧ (i) рд╡рд┐рдзрд┐ рд╣реИ рдЬреЛ рд╕реВрдЪрдХрд╛рдВрдХ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдХреЛрдб рдереЛрдбрд╝рд╛ рдФрд░ "рдХрдВрдШреА" рдФрд░ "рдСрдмреНрдЬреЗрдХреНрдЯрд┐рдлрд╛рдЗрдб" рд╣реИред рдпрд╣ рд╕рдм рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИ:
function naturalSort(array, extractor) {
"use strict" ;
//
var splitters = array.map(makeSplitter);
//
var sorted = splitters.sort(compareSplitters);
//
return sorted.map( function (splitter) {
return splitter.item;
});
//
function makeSplitter(item) {
return new Splitter(item);
}
//
// ""
function Splitter(item) {
var index = 0; //
var from = 0; //
var parts = []; //
var completed = false ; //
//
this .item = item;
// -
var key = ( typeof (extractor) === 'function' ) ?
extractor(item) :
item;
this .key = key;
//
this .count = function () {
return parts.length;
};
// ( parts[])
this .part = function (i) {
while (parts.length <= i && !completed) {
next(); //
}
return (i < parts.length) ? parts[i] : null ;
};
//
function next() {
//
if (index < key.length) {
//
while (++index) {
var currentIsDigit = isDigit(key.charAt(index - 1));
var nextChar = key.charAt(index);
var currentIsLast = (index === key.length);
// - ,
// ( / )
var isBorder = currentIsLast ||
xor(currentIsDigit, isDigit(nextChar));
if (isBorder) {
// parts[]
var partStr = key.slice(from, index);
parts.push( new Part(partStr, currentIsDigit));
from = index;
break ;
} // end if
} // end while
//
} else {
completed = true ;
} // end if
} // end next
//
function Part(text, isNumber) {
this .isNumber = isNumber;
this .value = isNumber ? Number(text) : text;
}
}
//
function compareSplitters(sp1, sp2) {
var i = 0;
do {
var first = sp1.part(i);
var second = sp2.part(i);
// ...
if ( null !== first && null !== second) {
// ( )
if (xor(first.isNumber, second.isNumber)) {
// ""
return first.isNumber ? -1 : 1;
//
} else {
var comp = compare(first.value, second.value);
if (comp != 0) {
return comp;
}
} // end if
// ... - ""
} else {
return compare(sp1.count(), sp2.count());
}
} while (++i);
//
function compare(a, b) {
return (a < b) ? -1 : (a > b) ? 1 : 0;
};
};
// ""
function xor(a, b) {
return a ? !b : b;
};
// :
function isDigit(chr) {
var code = charCode(chr);
return (code >= charCode( '0' )) && (code <= charCode( '9' ));
function charCode(ch) {
return ch.charCodeAt(0);
};
};
}
рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рдердХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВрдкреБрдирд╢реНрдЪ:
function thanks() {
alert( 'C PoiSoN Source Code Highlighter' );
};
* This source code was highlighted with Source Code Highlighter .