functional non-destructive array sort

JavascriptArraysSorting

Javascript Problem Overview


Apart for the native way of cloning an array and then sorting it in place, is there an algorithm and existing implementation that is more suited for non-destructive sorting?

Need to sort an array of floats into a new array without changing the source. My search results were rather thin since most of the literature is focused on reducing the memory requirements with in-place sorting.

Using the native sorted = [].slice().sort() works fine. This question is about understanding if there are other performant sorting implementations when memory constraints are removed since a new array is needed anyway.

Javascript Solutions


Solution 1 - Javascript

There's a simpler syntax for immutably sorting an array using ES6 spread operator:

[...array].sort(sortFn)

Solution 2 - Javascript

As the comments have repeated a few times:

  1. shuffledArray.slice().sort() is the default way to go.
  2. It's not really clear how we could have a better algorithm / method using the libraries your mentioned.

Seeing as the motivation for non-destructive sorting is related to writing functional code, and you're looking at Ramda...check out Facebook's ImmutableJS library if you haven't already.

Particularly, the Seq. You could start storing your array of floats in a Seq, sort it, and be sure the original Seq remains in the right order. In addition, it utilizes Lazy evaluation. http://facebook.github.io/immutable-js/docs/#/Seq
http://facebook.github.io/immutable-js/docs/#/Seq/sortBy

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHureluView Question on Stackoverflow
Solution 1 - JavascriptshuaibirdView Answer on Stackoverflow
Solution 2 - JavascriptSze-Hung Daniel TsuiView Answer on Stackoverflow