compareAddressv6(): -1 | 0 | 1
Compares two IPv6 addresses for sorting, numerically ascending.
Suitable as an Array.prototype.sort / toSorted comparator. For a
comparator that also accepts IPv4 addresses, see compareAddress, which
sorts every IPv4 address before every IPv6 one.
IPv4-mapped addresses (::ffff:x.x.x.x) are ordinary IPv6 values here —
they sort by their 128-bit value, inside the ::ffff:0:0/96 block.
Sort addresses numerically, not lexicographically
Sort addresses numerically, not lexicographically
import { assertEquals } from "@std/assert"; import { compareAddressv6, parseAddressv6, stringifyAddressv6 } from "@hertzg/ip/addressv6"; const addresses = ["2001:db8::9", "2001:db8::10", "2001:db8::2"].map((s) => parseAddressv6(s).address); assertEquals(addresses.toSorted(compareAddressv6).map(stringifyAddressv6), [ "2001:db8::2", "2001:db8::9", "2001:db8::10", ]);
The three possible results
The three possible results
import { assertEquals } from "@std/assert"; import { compareAddressv6, parseAddressv6 } from "@hertzg/ip/addressv6"; assertEquals(compareAddressv6(parseAddressv6("::1").address, parseAddressv6("::2").address), -1); assertEquals(compareAddressv6(parseAddressv6("::2").address, parseAddressv6("::1").address), 1); assertEquals(compareAddressv6(parseAddressv6("::1").address, parseAddressv6("::1").address), 0);