aboutsummaryrefslogtreecommitdiff
path: root/lib/unitsToRanges.js
diff options
context:
space:
mode:
Diffstat (limited to 'lib/unitsToRanges.js')
-rw-r--r--lib/unitsToRanges.js19
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)
+ }
+}