https://github.com/planeshifter/order
Returns a permutation which rearranges an input array.
https://github.com/planeshifter/order
Last synced: about 1 year ago
JSON representation
Returns a permutation which rearranges an input array.
- Host: GitHub
- URL: https://github.com/planeshifter/order
- Owner: Planeshifter
- License: mit
- Created: 2015-02-09T04:00:57.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2016-11-10T19:50:42.000Z (over 9 years ago)
- Last Synced: 2025-04-07T20:43:23.851Z (about 1 year ago)
- Language: CoffeeScript
- Homepage:
- Size: 11.7 KB
- Stars: 9
- Watchers: 3
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Dependencies][dependencies-image]][dependencies-url]
# order
Returns a permutation which rearranges input array.
## Installation
Install from npm:
```
npm install order-permutation
```
Use as follows:
``` javascript
var order = require( 'order-permutation' );
```
## order( arr, \[compareFunction\] )
The exported function requires as its first parameter the array for which the indices in specified order should be obtained. The optional parameter `compareFunction` specifies a function defining the sort order. If not supplied, the returned permutation indices of the array sort its elements in increasing order. To sort more complicated objects than numeric primitives, a custom `compareFunction` has to be supplied. This function compares elements `a` and `b` according to the following rules:
- If `compareFunction(a, b)` is less than 0, a gets a lower index than b
- If `compareFunction(a, b)` is greater than 0, b gets a lower index than a.
Therefore, the standard compare function which sorts the elements in ascending order is equivalent to
``` javascript
function( a, b ) {
if (a < b) {
return -1;
}
if (a > b) {
return 1;
}
return 0;
};
```
### Examples
#### Increasing Sequence:
Code:
``` javascript
order([1, 2, 3, 4])
```
Output:
``` javascript
[0, 1, 2, 3]
```
#### Decreasing Sequence:
Code:
``` javascript
order([4, 3, 2, 1])
```
Output:
``` javascript
[3, 2, 1, 0]
```
#### Custom Compare Function:
Code:
``` javascript
var arr = [{name:"Tom", age: 28}, {name:"Lisa",age:23},{name:"Bill", age: 65}]
// order decreasing with age:
order(arr, function(a,b){
return b.age - a.age;
});
```
Output:
``` javascript
[2, 0, 1]
```
### Obtaining the Sorted Array
To obtain the actual sorted array, one can use the `at()` function of the *lodash* library, like so:
``` javascript
var arr = [5, 1, 3, 2];
var indices = order(arr);
_.at(arr, indices)
```
Output:
``` javascript
[ 1, 2, 3, 5 ]
```
## Unit Tests
Run tests via the command `npm test`
---
## License
[MIT license](http://opensource.org/licenses/MIT).
[npm-image]: https://badge.fury.io/js/order-permutation.svg
[npm-url]: http://badge.fury.io/js/order-permutation
[travis-image]: https://travis-ci.org/Planeshifter/order.svg
[travis-url]: https://travis-ci.org/Planeshifter/order
[dependencies-image]: http://img.shields.io/david/Planeshifter/order.svg
[dependencies-url]: https://david-dm.org/Planeshifter/order