功能非破坏性数组排序

时间:2015-05-25 04:35:57

标签: javascript arrays sorting

除了克隆数组然后对其进行排序的本地方式之外,是否存在更适合非破坏性排序的算法和现有实现?

需要在不更改源的情况下将浮点数组排序到新数组中。我的搜索结果相当薄,因为大多数文献都专注于通过就地排序来降低内存需求。

使用原生sorted = [].slice().sort()可以正常使用。这个问题是关于理解是否存在其他高性能排序实现,因为无论如何都需要新的数组,因此删除了内存约束。

2 个答案:

答案 0 :(得分:37)

由于评论重复了几次:

  1. shuffledArray.slice().sort()是默认的方式。
  2. 我们不清楚如何使用您提到的库来获得更好的算法/方法。
  3. 看到非破坏性排序的动机与编写功能代码有关,你正在看Ramda ......如果你还没有,请查看Facebook的ImmutableJS库。

    特别是Seq。 您可以开始在Seq中存储浮点数组,对其进行排序,并确保原始Seq保持正确的顺序。 此外,它还利用了Lazy评估。 http://facebook.github.io/immutable-js/docs/#/Seq
    http://facebook.github.io/immutable-js/docs/#/Seq/sortBy

答案 1 :(得分:33)

使用ES6扩展运算符对数组进行不可变的排序有一个更简单的语法:

[...array].sort(sortFn)