diff options
Diffstat (limited to 'lib/unitsToRanges.js')
-rw-r--r-- | lib/unitsToRanges.js | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/lib/unitsToRanges.js b/lib/unitsToRanges.js index e73388a..764d8f2 100644 --- a/lib/unitsToRanges.js +++ b/lib/unitsToRanges.js @@ -65,7 +65,7 @@ module.exports = (units, sourceAddresses) => { } }) .flat() - .sort((a, b) => a - b) + .sort(sortNumbers) .reduce((acc, cur, idx, src) => { const curParts = cur.match(regexp) const prevParts = idx > 0 ? src[idx - 1].match(regexp) : null @@ -98,3 +98,20 @@ module.exports = (units, sourceAddresses) => { return unitRanges.length ? unitRanges.join(';') : null } + +/* custom sort function where 2 goes before 1A and 1A goes before 1B */ +function sortNumbers(a, b) { + if (Number.isInteger(Number(a)) && Number.isInteger(Number(b))) { + // both are integers + return a - b + } else if (Number.isInteger(Number(a)) && !Number.isInteger(Number(b))) { + // a is integer but b isn't, so a goes before b + return -1 + } else if (!Number.isInteger(Number(a)) && Number.isInteger(Number(b))) { + // a isn't integer but b is, so a goes after b + return 1 + } else { + // neither are integers + return a.localeCompare(b) + } +} |