Javascript 如何使用ramda的sortBy函数按降序排序?
使用ramda的排序函数时,我可以使用下降函数创建下降比较器: console.logR.sortR.downer.prop0[[2]、[3]、[1]] 更新: 对于sortBy,需要反转结果值以影响排序方向。这可以通过一个小的desc功能完成:Javascript 如何使用ramda的sortBy函数按降序排序?,javascript,sorting,ramda.js,Javascript,Sorting,Ramda.js,使用ramda的排序函数时,我可以使用下降函数创建下降比较器: console.logR.sortR.downer.prop0[[2]、[3]、[1]] 更新: 对于sortBy,需要反转结果值以影响排序方向。这可以通过一个小的desc功能完成: const desc = a => -a; const customSort = R.sortBy(R.compose(desc, R.prop(0))); customSort([[1], [3], [2], [4]]); // Resu
const desc = a => -a;
const customSort = R.sortBy(R.compose(desc, R.prop(0)));
customSort([[1], [3], [2], [4]]);
// Result: [[4], [3], [2], [1]]
工作示例:
使用sortWith的上一个答案:
sortWith会给你想要的结果
const customSort = R.sortWith([R.descend(R.prop(0))]);
customSort([[1], [3], [2], [4]]);
// Result: [[4], [3], [2], [1]]
工作示例:Ramda有几种不同的排序功能 最常见的是sort,它本质上是Array.prototype.sort方法的非变异纯函数版本。传递一个比较器:一个必须返回数字的二进制函数。如果数字为负数,则结果中第一个参数位于第二个参数之前;如果是肯定的,第二个论点在第一个论点之前;它是零,表示没有偏好,尽管现在大多数实现都是稳定的,这意味着第一个参数会出现 sortWith是一种将几个这样的比较器组合在一起的方法。如果您想按姓氏排序,并且-如果它们相同-按名字排序,您可以传递一个姓氏比较器和一个名字比较器,它将根据您的需要进行排序 为了帮助创建此类比较器函数,Ramda还提供了ascend和Descent,它们接受一个函数,该函数返回一个有序类型,如内置字符串、数字和日期类型,或任何具有适当valueOf方法的类型,并返回一个可传递给sort的比较器。因此,如果要对每个对象进行排序的对象都有一个数字age属性,则可以通过将degendo=>o.age等效地传递给R.sort或Array.prototype.sort,或作为比较器数组的一个传递给R.sortWith来降低age来对它们进行排序 但是,我们常常想要更简单的东西。我只想按它们的类型代码对它们进行排序。对于最简单的情况,Ramda提供了sortBy,它不接受比较器,而只是一个返回有序类型的函数。最常用的方法是简单地从对象中提取一个属性:sortByprop'type',但您可以做任何您喜欢的转换
但是对于sortBy来说,没有上升/下降的等价物。当然,这样的东西是可以写出来的,但sorta/DensedMyFunc已经涵盖了它。一种更优雅的方式来实现什么?您已经展示了创建下行分类器的合理方法:sortdescendprop0。你是说这应该通过sortBy和sort来实现吗?你看到遗漏了什么?我只是想有一种方法也可以使用下降功能。在查看了sortBy的实现后,可以理解为什么它不起作用。它比sortBy好多少?谢谢。我猜R.sortByR.composeR.negate,R.prop0;同样有效。但请注意,sortBy适用于任何有序类型,而不仅仅是数字。不能对字符串求反。我没有尝试过有适当价值的日期或对象;来自乘法运算的强制可能会让这一切顺利进行;但我不想指望它。