-
Notifications
You must be signed in to change notification settings - Fork 0
Home
A lightweight and convenient generator of sort functions for arrays of objects and objects of objects that works both on server (NodeJS) and client (browser) sides.
Written by Vladimir Neverov sanguini@gmail.com in 2013.
Homepage: /~https://github.com/vne/sortjs/wiki
SortJS can be used to sort arrays of objects and objects of objects by multiple properties. An array may look like this:
var array = [
{ id: 1, surname: 'Smith', name: 'John', age: 30, income: 32000, percent: 55.3 },
{ id: 2, surname: 'smith', name: 'Susanne', age: 28, income: 40000, percent: 55.1 },
{ id: 3, surname: 'Bittey', name: 'Chris', age: 55, income: 20000, percent: 87.5 },
{ id: 4, surname: 'The Fourth', name: 'Jane', age: 387, income: 150000, percent: 15.8 },
{ id: 5, surname: 'Quinne', name: 'Stew', age: 5, income: 8500, percent: 31.7 },
{ id: 6, surname: 'augsburg', name: 'Theodor', age: 154, income: 210000, percent: 99.9 },
{ id: 7, surname: 'Zorro', name: 'Vasily', age: 30, income: 17000, percent: 7.3 }
]
An object may look like this:
var obj = {
1: { surname: 'Smith', name: 'John', age: 30, income: 32000, percent: 55.3 },
2: { surname: 'smith', name: 'Susanne', age: 28, income: 40000, percent: 55.1 },
3: { surname: 'Bittey', name: 'Chris', age: 55, income: 20000, percent: 87.5 },
4: { surname: 'The Fourth', name: 'Jane', age: 387, income: 150000, percent: 15.8 },
5: { surname: 'Quinne', name: 'Stew', age: 5, income: 8500, percent: 31.7 },
6: { surname: 'augsburg', name: 'Theodor', age: 154, income: 210000, percent: 99.9 },
7: { surname: 'Zorro', name: 'Vasily', age: 30, income: 17000, percent: 7.3 }
};
Both can be sorted using SortJS. In case of an array you get a sorted array, in case of an object you get a sorted array of object keys.
By default, SortJS returns a copy of a source array (as opposed to build-in Javascript method). This behaviour can be altered.
var sortjs = require('sortjs');
var sortedArray = sortjs.sort(array, ["surname", "name"]); // returns new array in requested order
var sortedObjKeys = sortjs.sort(obj, ["surname", "name"]); // returns array of object keys sorted in requested order
sortjs.sort(array, ["surname", "name"], true); // perform an inplace sort like build-in Javascript method
sortjs.inplace(array, ["surname", "name"]); // another way of doing inplace sorting
var sortjs = require('sortjs');
sortjs.improve(); // add .sortjs method to Array and Object prototypes
var sortedArray = array.sortjs(["surname", "name"]);
var sortedObjKeys = obj.sortjs(["surname", "name"]); // be careful, this returns keys of the object
sortjs.clear() // remove added .sortjs method from Array and Object prototypes
sortjs.improve(true); // add .sortjs method to prototypes performing inplace sorting for arrays
array.sortjs(["surname", "name"]);
sortjs.clear();
array.isortjs(["surname", "name"]); // another way of doing inplace sorting
An array of property names should be specified to do the actual sort. Property names are case-sensitive. They can have the following prefixes:
- – (minus sign) means reverse sorting by this property
- i: (letter 'i' followed by a colon) means case-insensitive string comparison by this property
- s: (letter 's' followed by a colon) means case-sensitive string comparison by this property
- n: (letter 'n' followed by a colon) means integer comparison by this property
- f: (letter 'f' followed by a colon) means float comparison by this property
Minus and one of the letters can be combined like this: '-i:property'. More than one letter prefix is not allowed (and is not needed).
Examples:
- ['i:surname', 'i:name', 'i:midname'] - sort case-insensitevely by surname, then by name, then by midname
- ['-n:price', 'i:address'] - reverse numerical (integer) sort by price, then case-insensitevely by address
More examples of library usage can be found in test.js file. To run tests you will need Mocha, the tests themselves use built-in NodeJS assert module. To run tests in browser open test.html file.