An open API service indexing awesome lists of open source software.

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.

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