--- title: Stable sort tags: array cover: horse-sunset firstSeen: 2018-02-06T18:33:49+02:00 lastUpdated: 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] ```