@technobuddha/library
Version:
A large library of useful functions
63 lines (62 loc) • 2.48 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.compareStrings = void 0;
var isNil_1 = __importDefault(require("lodash/isNil"));
var compareNumbers_1 = __importDefault(require("../compareNumbers"));
/**
* Compare two strings
*
* @param a First string
* @param b Second string
* @param caseInsensitive True if strings are to be compared case insensitive (default false)
* @returns 0 if a == b; -1 if a < b; 1 if a > b
*
* @default caseInsensitive false
* @default natural false
* @default version false
*/
function compareStrings(text1, text2, _a) {
var _b, _c;
var _d = _a === void 0 ? {} : _a, _e = _d.caseInsensitive, caseInsensitive = _e === void 0 ? false : _e, _f = _d.natural, natural = _f === void 0 ? false : _f, _g = _d.version, version = _g === void 0 ? false : _g;
if (text1 === text2)
return 0;
if (isNil_1.default(text1))
return -1;
if (isNil_1.default(text2))
return 1;
if (caseInsensitive) {
text1 = text1.toLowerCase();
text2 = text2.toLowerCase();
if (text1 === text2)
return 0;
}
if (version) {
var v1 = text1.trim().split(/[.-]/u);
var v2 = text2.trim().split(/[.-]/u);
var count = Math.max(v1.length, v2.length);
var order = 0;
for (var i = 0; order === 0 && i < count; ++i)
order = compareStrings(v1[i], v2[i], { natural: true });
return order || compareNumbers_1.default(v1.length, v2.length);
}
else if (natural) {
var t1 = (_b = text1.match(/(\.\d+|\d+|\D+)/ug)) !== null && _b !== void 0 ? _b : [];
var t2 = (_c = text2.match(/(\.\d+|\d+|\D+)/ug)) !== null && _c !== void 0 ? _c : [];
var count = Math.min(t1.length, t2.length);
var order = 0;
for (var i = 0; order === 0 && i < count; ++i) {
if (t1[i] !== t2[i]) {
var n1 = Number.parseFloat(t1[i]);
var n2 = Number.parseFloat(t2[i]);
order = Number.isNaN(n1) || Number.isNaN(n2) ? compareStrings(t1[i], t2[i]) : compareNumbers_1.default(n1, n2);
}
}
return order || compareNumbers_1.default(t1.length, t2.length);
}
return text1 < text2 ? -1 : 1;
}
exports.compareStrings = compareStrings;
exports.default = compareStrings;