UNPKG

dtable-utils

Version:

dtable common utils

70 lines (65 loc) 2.12 kB
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 };