Skip to content

Latest commit

 

History

History
131 lines (98 loc) · 3.05 KB

File metadata and controls

131 lines (98 loc) · 3.05 KB

sift-sort

NPM Version Github Issues Travis Coveralls Dev Dependencies

Sort an array of objects using the MongoDB $sort syntax

Features

  • Stable sorting
  • Nested sorting
  • No dependencies
  • Support for ImmutableJS

Install

npm install sift-sort

Usage

import { sort, inverse } from 'sift-sort';

const accounts = [
  { meta: { lastLogin: { day: 4 }, id: 7 }, type: 'user' },
  { meta: { lastLogin: { day: 6 }, id: 1 }, type: 'admin' },
  { meta: { lastLogin: { day: 2 }, id: 8 }, type: 'user' },
];

sort(accounts, {
  meta: {
    id: 1
  }
});

/* Returns:
[
  { meta: { lastLogin: { day: 6 }, id: 1 }, type: 'admin' },
  { meta: { lastLogin: { day: 4 }, id: 7 }, type: 'user' },
  { meta: { lastLogin: { day: 2 }, id: 8 }, type: 'user' },
]
*/

sort(accounts, inverse({
  meta: {
    id: 1
  }
}));

// Which is the same as...

sort(accounts, {
  meta: {
    id: -1
  }
});

/* Both returns:
[
  { meta: { lastLogin: { day: 2 }, id: 8 }, type: 'user' },
  { meta: { lastLogin: { day: 4 }, id: 7 }, type: 'user' },
  { meta: { lastLogin: { day: 6 }, id: 1 }, type: 'admin' },
]
*/

sort(accounts, {
  type: -1,       // Negative values imply a descending sort
  meta: {
    id: 2
  }
});

/* Returns:
[
  { meta: { lastLogin: { day: 4 }, id: 7 }, type: 'user' },
  { meta: { lastLogin: { day: 2 }, id: 8 }, type: 'user' },
  { meta: { lastLogin: { day: 6 }, id: 1 }, type: 'admin' },
]
*/

API Reference

sort(input : array, params : object) -> array

Sort an array of objects using the specified sorting parameters. Returns an array of objects which has been sorted.

Sorting parameters are specified with an object containing keys that correspond with which keys you want to sort and values that specify the ordering. Negative values imply a descending sort operation. The order of sorting operations is determined by abs(value).

inverse(params : object) -> object

A utility function for reversing the type of sorting operation from ascend to descend and vice-versa. This simply negates every value in params.

License

Contributing

Contributions are highly welcome and even encouraged!