Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用ramda的sortBy函数按降序排序?_Javascript_Sorting_Ramda.js - Fatal编程技术网

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

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

使用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]]);

// 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适用于任何有序类型,而不仅仅是数字。不能对字符串求反。我没有尝试过有适当价值的日期或对象;来自乘法运算的强制可能会让这一切顺利进行;但我不想指望它。