Skip to content

Instantly share code, notes, and snippets.

@DavesCodeMusings
Last active January 10, 2025 21:56
Show Gist options
  • Select an option

  • Save DavesCodeMusings/e4948e7dc566a841bfb6b20bc0088e6a to your computer and use it in GitHub Desktop.

Select an option

Save DavesCodeMusings/e4948e7dc566a841bfb6b20bc0088e6a to your computer and use it in GitHub Desktop.
Sort IP addresses by octet order rather than the usual string sorting
#!/usr/bin/env node
function ipv4Compare(a, b) {
let aOctets = a.split('.');
let bOctets = b.split('.');
if (aOctets.length !== 4 || bOctets.length !==4) {
throw("InvalidIPv4Address");
}
if (parseInt(aOctets[0]) > parseInt(bOctets[0])) {
return 1;
}
else if (parseInt(aOctets[0]) < parseInt(bOctets[0])) {
return -1;
}
else if (parseInt(aOctets[1]) > parseInt(bOctets[1])) {
return 1;
}
else if (parseInt(aOctets[1]) < parseInt(bOctets[1])) {
return -1;
}
else if (parseInt(aOctets[2]) > parseInt(bOctets[2])) {
return 1;
}
else if (parseInt(aOctets[2]) < parseInt(bOctets[2])) {
return -1;
}
else if (parseInt(aOctets[3]) > parseInt(bOctets[3])) {
return 1;
}
else if (parseInt(aOctets[3]) < parseInt(bOctets[3])) {
return -1;
}
else {
return 0;
}
}
let ipAddrs = [
'192.168.1.161',
'192.168.1.1',
'192.168.1.1',
'172.16.10.2',
'192.168.1.18',
'1.1.1.1',
'192.168.1.14',
'10.10.1.1'
]
console.log("IP addresses:", ipAddrs);
console.log("IP addresses sorted:", ipAddrs.sort());
console.log("IP addresses custom sorted:", ipAddrs.sort(ipv4Compare));
// Append an invalid IPv4 value
ipAddrs.push('1.2.3');
console.log("Invalid IP address:", ipAddrs);
console.log("Invalid IP address sorted:", ipAddrs.sort());
// This will fail:
console.log("Invalid IP address custom sorted:", ipAddrs.sort(ipv4Compare));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment