sort-ids
Version:
Calculate sorting identifiers
40 lines (22 loc) • 1.81 kB
Markdown
# sort-ids [](https://github.com/dy/sort-ids/actions/workflows/test.yml)
Sort input array, return sorted ids of the array items, keeping the initial array unchanged.
Useful to perform linked sorting of multiple arrays, where linked array[s] should be sorted the same way as the primary one.
[](https://npmjs.org/package/sort-ids/)
```js
import sortIds from 'sort-ids'
import reorder from 'array-rearrange'
const rates = [.12, .47, .52, .97, ...sourceNumbers]
const names = ['John', 'Alexa', 'Jimmy', 'Kate', ...linkedItems]
const ids = sortIds(rates)
const sortedRates = reorder(rates, ids)
const sortedNames = reorder(names, ids)
```
## `ids = sortIds(array, ids?, precise=true)`
Calculate ids corresponding to sorted input array. The input array isn't changed. Optionally pass input `ids` - some initial order of ids. `precise` flag makes sure no missorts took place and resolves them, if any. Disabling that can save `~30ms` for `1e6` items input arrays.
See also [array-rearrange](https://ghub.io/array-rearrange) for reordering input array based on a list of ids.
## Motivation
This package is >= 6 times faster compared to sorting function. That is achieved by packing input `value - id` pairs into a single `float64` value and performing native sort on that _Float64Array_, then unpacking the `ids` back.
## Acknowledgement
The idea was proposed by [Robert Monfera](https://github.com/monfera) for [snap-points-2d](https://ghub.io/snap-points-2d) and eventually implemented. But there may be other applications, like [sorting colors](https://twitter.com/winkerVSbecks/status/1063919602038685697) etc.
## License
(c) 2018 Dmitry Iv. MIT License