功能非破坏性数组排序

问题描述 投票:40回答:2

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

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

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

javascript arrays sorting
2个回答
38
投票

由于评论重复了几次:

  1. shuffledArray.slice().sort()是默认的方式。
  2. 我们如何能够使用您提到的库获得更好的算法/方法并不是很清楚。

看作非破坏性排序的动机与编写功能代码有关,你正在看Ramda ...如果你还没有,请查看Facebook的ImmutableJS库。

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


34
投票

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

[...array].sort(sortFn)
© www.soinside.com 2019 - 2024. All rights reserved.