导入
排序函数
Ramda 排序函数概览。(4分钟阅读)
排序函数
原生的 sort 方法是破坏性的,意味着它会直接修改数组。
1const nums = [3, 2, 4, 1]; 2const result = nums.sort((a, b) => a - b); 3 4console.log({ nums, result });
Ramda 提供了一个非破坏性的 sort 函数。
1import { sort } from 'ramda'; 2 3const nums = [3, 2, 4, 1]; 4const result = sort((a, b) => a - b, nums); 5 6console.log({ nums, result });
sortBy 在比较之前会对值应用一个函数。例如,按绝对值排序现在变得非常简单。
1import { sortBy } from 'ramda'; 2 3const result = sortBy(Math.abs, [-100, 1, -50, 0]); 4 5console.log({ result });
如果需要按多个条件排序,可以使用 sortWith。这个例子按年龄排序,然后按姓名排序。
1import { ascend, prop, sortWith } from 'ramda'; 2 3const people = [ 4 { name: 'Bobo', age: 25 }, 5 { name: 'Cam', age: 25 }, 6 { name: 'Al', age: 29 } 7]; 8 9const result = sortWith([ 10 ascend(prop('age')), 11 ascend(prop('name')) 12], people); 13 14console.log({ result });
Ramda 的 ascend 函数包裹 prop('age'),表示“按年龄升序排列(从小到大)”。
1ascend(prop('age'))
同样地,ascend(prop('name')) 表示“按姓名升序排列(A, B, C, D...)”。
1ascend(prop('name'))
当年龄相同时,sortWith 会进一步按姓名排序。
如果需要相反的效果,可以使用 descend。
1import { descend, prop, sortWith } from 'ramda'; 2 3const people = [ 4 { name: 'Bobo', age: 25 }, 5 { name: 'Cam', age: 25 }, 6 { name: 'Al', age: 29 } 7]; 8 9const result = sortWith([ 10 descend(prop('age')), 11 descend(prop('name')) 12], people); 13 14console.log({ result });
现在,people 按相反顺序排序。