returns a permutation which rearranges input array
npm install order-permutation[![NPM version][npm-image]][npm-url]
[![Build Status][travis-image]][travis-url]
[![Dependencies][dependencies-image]][dependencies-url]
Returns a permutation which rearranges input array.
Install from npm:
```
npm install order-permutation
Use as follows:
` javascript`
var order = require( 'order-permutation' );
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:compareFunction(a, b)
- If is less than 0, a gets a lower index than bcompareFunction(a, b)
- If 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;
};
#### 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]
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 ]
Run tests via the command npm test`
---
[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