function compareAddressv6
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.

Examples

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

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);

Parameters

The first address

The second address

Return Type

-1 | 0 | 1

-1 if a sorts before b, 1 if after, 0 if equal

Usage

import { compareAddressv6 } from "addressv6.ts";