Nefariously Programmed Mecha

    multisort
    DefinitelyTyped icon, indicating that this package has TypeScript declarations provided by the separate @types/multisort package

    0.5.3 • Public • Published

    Multitest

    A small library for sorting arrays by multiple criteria.

    Installation

    npm install multisort --save

    bower install multisort --save

    Basic Usage

    var input = [
      {firstName: "Kate", lastName: "Bush"},
      {firstName: "George", lastName: "Bush", suffix: "Junior"},
      {firstName: "George", lastName: "Orwell"},
      {firstName: "George", lastName: "Bush", suffix: "Senior"},
    ];
     
    var criteria = [
      'firstName',
      '~lastName.length',
      'suffix.charAt(1)'
    ];
     
    multisort(inputArray, criteria)
     
    // input is now sorted by firstName (ascending), then lastName.length (descending),
    // and finally suffix.charAt, called with 1 as the argument:
    // [
    //  {firstName: "George", lastName: "Orwell"},
    //  {firstName: "George", lastName: "Bush", suffix: "Senior"},
    //  {firstName: "George", lastName: "Bush", suffix: "Junior"},
    //  {firstName: "Kate", lastName: "Bush"},
    // ];
    var input = [8, 7, 6, 5, 4, 3, 2, 1];
     
    var criteria = [
      function(a) {return a % 2},
      function(a) {return a % 3},
      function(a) {return a}
    ];
     
    multisort(input, criteria);
     
    // input is now:
    // [6, 4, 2, 8, 3, 1, 7, 5]

    Partial Application

    // Passing a single argument makes a sorting function that can then be applied to lists.
    var sortByMod2AndMod3 = multisort([
      function(a) {return a % 2},
      function(a) {return a % 3},
      function(a) {return a}
    ]);
     
    var input1 = [8, 7, 6, 5, 4, 3, 2, 1];
    sortByMod2AndMod3(input1);
    // input1 is [6, 4, 2, 8, 3, 1, 7, 5]
     
    var input2 = [1, 5, 10, 25, 50, 100];
    sortByMod2AndMod3(input2);
    // input2 is [10, 100, 50, 1, 25, 5]

    Features

    Criteria types:

    • Function: Applies the given function to each element, and the return values are sorted in ascending order, using < and >.
    • String: Picks out the property indicated by the string, and sorts in ascending order, using < and >. Nested properties can be accessed with dot syntax, as in "property.subproperty.subsubproperty"
    • !String or ~String: As above, but sorted in descending order. This works with the functional and existential operators below.
    • String(arg1, arg2...): As above, but calls the indicated property as a function with the given arguments. Arguments are split by commas, trimmed, and parsed with JSON.parse.
    • String?: As above, tests whether the property is null or undefined. Items without the property are sorted before items with it.

    Tests

    npm test

    Contributing

    In lieu of a formal styleguide, take care to maintain the existing coding style. Add unit tests for any new or changed functionality. Lint and test your code.

    Release History

    • 0.1.0 Initial release

    Install

    npm i multisort

    DownloadsWeekly Downloads

    1,136

    Version

    0.5.3

    License

    ISC

    Last publish

    Collaborators

    • peterkhayes