JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 2
  • Score
    100M100P100Q38303F
  • License MIT

Natural order (sort) array of hostname

Package Exports

  • hostname-natural-order
  • hostname-natural-order/lib/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (hostname-natural-order) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

hostname-natural-order

Version npm Npm package total downloads Module type: CJS node.js version node-lts License Unit test status

Natural order (natural sort) for array of hostnames.

This library is using compare function from natural-orderby.

When do you need this package?

You need it when you need to sort hostname list like this correctly:

  • www1.example.org
  • www2.example.org
  • www100.example.org
  • www200.example.org
  • www1.test.org
  • www2.test.org

If you just use standard Array.prototype.sort, it would sort incorrectly and return:

  • www1.example.org
  • www1.test.org
  • www100.example.org
  • www2.example.org
  • www2.test.org
  • www200.example.org

That order is not what you expect? Here come a package to order that correctly.

Installation

npm i hostname-natural-order

Usage

Using Array.prototype.sort

const { compare: compareHostname } = require('hostname-natural-order');

const domains = [
  'test.org',
  'org',
  'a.test.net',
  'net',
  'c.test.net',
  '3.b.test.net',
  '100.b.test.net',
  'example.org',
  '2.b.test.net',
  'test.net',
  'c.test.net',
  '1.b.test.net',
];

domains.sort(compareHostname);
console.log(JSON.stringify(domains, null, 2));

Will print:

[
  "net",
  "test.net",
  "a.test.net",
  "1.b.test.net",
  "2.b.test.net",
  "3.b.test.net",
  "100.b.test.net",
  "c.test.net",
  "c.test.net",
  "org",
  "example.org",
  "test.org"
]

Using orderBy from natural-orderby

Don't forget to install natural-orderby by at first.

npm i natural-orderby
const { compare: compareHostname } = require('hostname-natural-order');
const { orderBy } = require('natural-orderby');

const hostnameList = [
  { name: '2.b.test.net' },
  { name: 'test.net' },
  { name: '1.b.test.net' },
  { name: '8.8.4.4' },
  { name: '100.100.100.100' },
  { name: 'example.org' },
  { name: '100.b.test.net' },
  { name: '8.8.8.8' },
  { name: 'test.org' },
  { name: 'a.test.net' },
  { name: 'c.test.net' },
  { name: '1.1.1.1' },
  { name: 'net' },
  { name: 'org' },
  { name: 'c.test.net' },
];

const hostnameListSorted = orderBy(
  hostnameList,
  (item) => item.name,
  compareHostname,
);

Limitation

This library expect and has been tested if strings to compare is a valid hostname or IP address (validate ip addresses using ip-toolkit).

Unexpected results might be happen if you don't validate the input. See unit test files for what we've test.

It required node.js version > 16.x because we use ip-toolkit who has requirement of node.js > 16.x. If you need to run it on older version of node.js, please raise an issue so I can know demand for that exists.

Changelog

See CHANGELOG.md file.

License

License under MIT License. Feel free to use and modified this library.