comparators
    TypeScript icon, indicating that this package has built-in type declarations

    3.0.3 • Public • Published

    Comparators.js

    Java8-style chainable comparators for Javascript

    Raison d'être

    In working with JS, I've run across situations where I need multi-key sorting in my Backbone collections -- which can sort themselves using the same type of comparator function as Array.prototype.sort expects.

    When Java 8 rolled out, it brought with it a Comparator interface, that allowed chaining comparators for multi-attribute sort like this:

    people.sort(
        Comparator.comparing(Person::getLastName)
            .thenComparing(Person::getFirstName)
    );

    I really liked that approach, so I brought that into Javascript with the same(ish) syntax. That's this library.

    Usage and examples

    Directly translating our above Java 8 code, we could do the following:

    /* Demo data */
    var people = [
      {lastName: "Baggins", firstName: "Frodo"},
      {lastName: "Gamgee",  firstName: "Samwise"},
      {lastName: "Baggins", firstName: "Bilbo"}
    ];
    
    sortedPeople = people.sort(Comparators.comparing("lastName").thenComparing("firstName"));
    
    /* sortedPeople is now:
    [
      {lastName: "Baggins", firstName: "Bilbo"},
      {lastName: "Baggins", firstName: "Frodo"},
      {lastName: "Gamgee",  firstName: "Samwise"},
    ]; 
    */

    For more examples, see the tests in test/comparators.spec.js.

    Where and how can I use it?

    It works in the browser without a module system, as a CommonJS module, and as an AMD module.

    The simplest (but global-namespace-polluting) way to use it is to include comparators.js in a script tag:

    <script type="text/javascript" src="comparators.min.js"></script>

    In node/CommonJS loaders, just require it (it's available on NPM as comparators):

    var Comparators = require("comparators").default; // the .default is necessary because of how Typescript compiles to commonjs

    It works similarly in AMD loaders (require.js used in the below example):

    require(['comparators.min'], function(Comparators){
      /* Do a thing! */
    });

    License

    Comparators.js is made available under the MIT License (Quick summary of it here)

    Install

    npm i comparators

    DownloadsWeekly Downloads

    414

    Version

    3.0.3

    License

    MIT

    Unpacked Size

    60.4 kB

    Total Files

    19

    Last publish

    Collaborators

    • spencerwi