dtable-utils
Version:
dtable common utils
70 lines (65 loc) • 2.12 kB
JavaScript
import { REG_STRING_NUMBER_PARTS, REG_NUMBER_DIGIT } from '../../constants/reg.js';
import { SORT_TYPE } from '../../constants/sort.js';
/**
* Compare strings
* @param {string} leftString
* @param {string} rightString
* @returns number
*/
var compareString = function compareString(leftString, rightString) {
if (!leftString && !rightString) return 0;
if (!leftString) return -1;
if (!rightString) return 1;
if (typeof leftString !== 'string' || typeof rightString !== 'string') return 0;
var leftStringParts = leftString.match(REG_STRING_NUMBER_PARTS);
var rightStringParts = rightString.match(REG_STRING_NUMBER_PARTS);
var len = Math.min(leftStringParts.length, rightStringParts.length);
var isDigitPart;
var leftStringPart;
var rightStringPart;
// Loop through each substring part to canCompare the overall strings.
for (var i = 0; i < len; i++) {
leftStringPart = leftStringParts[i];
rightStringPart = rightStringParts[i];
isDigitPart = REG_NUMBER_DIGIT.test(leftStringPart) && REG_NUMBER_DIGIT.test(rightStringPart);
if (isDigitPart) {
leftStringPart = parseInt(leftStringPart);
rightStringPart = parseInt(rightStringPart);
if (leftStringPart > rightStringPart) {
return 1;
}
if (leftStringPart < rightStringPart) {
return -1;
}
}
if (leftStringPart !== rightStringPart) {
return leftString.localeCompare(rightString);
}
}
return leftString.localeCompare(rightString);
};
/**
* Sort text
* @param {string} leftText
* @param {string} rightText
* @param {string} sortType e.g. 'up' | 'down
* @returns number
*/
var sortText = function sortText(leftText, rightText, sortType) {
var emptyLeftText = !leftText;
var emptyRightText = !rightText;
if (emptyLeftText && emptyRightText) {
return 0;
}
if (emptyLeftText) {
return 1;
}
if (emptyRightText) {
return -1;
}
if (rightText === leftText) {
return 0;
}
return sortType === SORT_TYPE.UP ? compareString(leftText, rightText) : -1 * compareString(leftText, rightText);
};
export { compareString, sortText };