28 lines
942 B
Markdown
28 lines
942 B
Markdown
---
|
|
title: Stable sort
|
|
type: snippet
|
|
tags: [array]
|
|
cover: horse-sunset
|
|
dateModified: 2020-10-22T20:24:30+03:00
|
|
---
|
|
|
|
Performs stable sorting of an array, preserving the initial indexes of items when their values are the same.
|
|
|
|
- Use `Array.prototype.map()` to pair each element of the input array with its corresponding index.
|
|
- Use `Array.prototype.sort()` and a `compare` function to sort the list, preserving their initial order if the items compared are equal.
|
|
- Use `Array.prototype.map()` to convert back to the initial array items.
|
|
- Does not mutate the original array, but returns a new array instead.
|
|
|
|
```js
|
|
const stableSort = (arr, compare) =>
|
|
arr
|
|
.map((item, index) => ({ item, index }))
|
|
.sort((a, b) => compare(a.item, b.item) || a.index - b.index)
|
|
.map(({ item }) => item);
|
|
```
|
|
|
|
```js
|
|
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
const stable = stableSort(arr, () => 0); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
|
|
```
|