Sha256: 4c8c9e09e0c9b6adbcd0d6f0fdf72140265b1d22d00949f3f3528f34efe9ad15
Contents?: true
Size: 1.36 KB
Versions: 26
Compression:
Stored size: 1.36 KB
Contents
'use strict'; Object.defineProperty(exports, '__esModule', { value: true, }); exports.naturalCompare = naturalCompare; /** * Returns a number indicating whether a reference string comes before, or after, * or is the same as the given string in natural sort order. * * See: https://en.wikipedia.org/wiki/Natural_sort_order * */ function naturalCompare(aStr, bStr) { let aIndex = 0; let bIndex = 0; while (aIndex < aStr.length && bIndex < bStr.length) { let aChar = aStr.charCodeAt(aIndex); let bChar = bStr.charCodeAt(bIndex); if (isDigit(aChar) && isDigit(bChar)) { let aNum = 0; do { ++aIndex; aNum = aNum * 10 + aChar - DIGIT_0; aChar = aStr.charCodeAt(aIndex); } while (isDigit(aChar) && aNum > 0); let bNum = 0; do { ++bIndex; bNum = bNum * 10 + bChar - DIGIT_0; bChar = bStr.charCodeAt(bIndex); } while (isDigit(bChar) && bNum > 0); if (aNum < bNum) { return -1; } if (aNum > bNum) { return 1; } } else { if (aChar < bChar) { return -1; } if (aChar > bChar) { return 1; } ++aIndex; ++bIndex; } } return aStr.length - bStr.length; } const DIGIT_0 = 48; const DIGIT_9 = 57; function isDigit(code) { return !isNaN(code) && DIGIT_0 <= code && code <= DIGIT_9; }
Version data entries
26 entries across 26 versions & 1 rubygems