gpt4 book ai didi

javascript - 如何使用 ramda 的 sortBy 函数按降序排序?

转载 作者:行者123 更新时间:2023-12-02 21:54:56 24 4
gpt4 key购买 nike

当使用 ramda 的 sort 函数时,我可以使用 descend 函数创建降序比较器:

console.log(R.sort(R.descend(R.prop(0)))([[2],[3],[1]]))
<script src="https://cdnjs.cloudflare.com/ajax/libs/ramda/0.26.1/ramda.min.js"></script>

对于sortBy,这不起作用。该列表默认按升序排序。

R.sortBy(R.prop(0))([[2],[3],[1]])

我能想到的唯一解决方案是在排序后显式反转列表,但是没有更优雅的方法来实现这一点吗?

最佳答案

Ramda 具有多种不同的排序功能。

最熟悉的是sort ,它本质上是 Array.prototype.sort 的非变异纯函数版本。方法。您向它传递一个比较器:一个必须返回数字的二进制函数。如果数字为负数,则结果中第一个参数位于第二个参数之前;如果为正,则第二个参数先于第一个参数;如果它为零,则表示没有任何偏好,尽管现在大多数实现都是稳定的,这意味着第一个参数将出现。

sortWith是将几个这样的比较器串在一起的一种方法。如果您想按姓氏排序,并且(如果它们相同)按名字排序,您可以传递姓氏比较器和名字比较器,它会根据您的需要进行排序。

为了帮助创建此类比较器函数,Ramda 还提供 ascenddescend ,它接受一个返回有序类型的函数,例如内置的 String、Number 和 Date 类型,或具有适当 valueOf 的任何类型。方法,并返回一个可以传递给 sort 的比较器。因此,如果您要排序的对象各自具有数字 age属性,您可以通过传递 descend(o => o.age) 按年龄递减对它们进行排序(相当于 descend(prop('age')) )到 R.sortArray.prototype.sort或者 - 作为比较器数组之一 - 到 R.sortWith .

但我们常常想要一些更简单的东西。 我只想按类型代码对它们进行排序。对于最简单的情况,Ramda 提供 sortBy ,它不采用比较器,而只是一个返回有序类型的函数。最常见的是通过简单地从对象中提取属性来使用:sortBy(prop('type')) ,但您可以进行任何您喜欢的转换。

但是没有与 ascend 等效的值/descend对于 sortBy 。虽然当然可以写类似的东西,但 sort(a/descend(myFunc)) 已经涵盖了它。 .

关于javascript - 如何使用 ramda 的 sortBy 函数按降序排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60030175/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com