结合前些天学的箭头函数我想到一种非常简短的sort排序写法:(这可能是最短的英文名排序方法了)
贴出来大家一起探讨一下:
[4,1,2,32].sort((x,y)=>x>y); //[1, 2, 4, 32] //对字母也生效
[4,1,2,32,'b','ac','a'].sort((x,y)=>x>y);
//[1, 2, 4, 32, "a", "ac", "b"] //英文名排序
['Jhon','Ben','Anna'].sort((x,y)=>x>y);
//["Anna", "Ben", "Jhon"] //英文姓+名排序
["Prancer Chua", "Blitzen Claus", "Cupid Foroutan","Comet Karavani", "Dancer Moore", "Dasher Tonoyan"].sort((x,y)=>x>y); //["Blitzen Claus", "Comet Karavani", "Cupid Foroutan", "Dancer Moore", "Dasher Tonoyan", "Prancer Chua"]
下面是Arry.sort()的知识点回顾备忘 —_—
sort函数原型
定义 :
sort() 方法用于对数组的元素进行排序(默认升序)。
语法 :
ArrayObject.sort(function)
参数 | 描述 |
---|---|
function | 可选。规定排序顺序。必须是函数。 |
返回值 : 排序好的原数组
返回对数组的引用。请注意,数组在原数组上进行排序,不生成副本。
说明:
1.如果调用该方法时没有使用参数(即array.sort()),函数将调用数组每项的toString()方法,然后比较每项的字符串来确定排序。(所以含2位数字的排序就不正常了)
[4,1,2,32].sort(); //[1, 2, 32, 4] 出错
2.大多情况下(例如排序含超过2位数字的数组)需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。
比较函数应该具有两个参数 a 和 b,其应返回值如下:
- 若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
- 若 a 等于 b,则返回 0。
- 若 a 大于 b,则返回一个大于 0 的值。
- 简单来说就是,想象当前仅有2个数ab需要排序,返回值>=1,ab的位置对调。返回其他值则不变。
- 扩展到多个数排序,只要判断a>b,返回1,ab的位置对调为ba(此时为保证b在a的前面),就能实现升序。
一个常见的用例 eg:
function compair(value1,value2){ if(value1>value2) return 1;} [4,1,2,32].sort(compair); //[1, 2, 4, 32]
结合前些天学的箭头函数我想到一种更简短的方法:
[4,1,2,32].sort((x,y)=>x>y); //[1, 2, 4, 32] //对字母也生效
[4,1,2,32,'b','ac','a'].sort((x,y)=>x>y);
//[1, 2, 4, 32, "a", "ac", "b"] //英文名排序
['Jhon','Ben','Anna'].sort((x,y)=>x>y);
//["Anna", "Ben", "Jhon"] //英文姓+名排序
["Prancer Chua", "Blitzen Claus", "Cupid Foroutan","Comet Karavani", "Dancer Moore", "Dasher Tonoyan"].sort((x,y)=>x>y); //["Prancer Chua", "Blitzen Claus", "Cupid Foroutan","Comet Karavani", "Dancer Moore", "Dasher Tonoyan"].sort((x,y)=>x>y)
另外更常用在按对象列表的某一属性(比如按年龄)排序
var objectList2 = new Array();
functionWorkMate(name,age){
this.name=name;
this.age=age;
}
objectList2.push(new WorkMate('jack',20));
objectList2.push(new WorkMate('tony',25));
objectList2.push(new WorkMate('stone',26));
objectList2.push(new WorkMate('mandy',23));
//按年龄从小到大排序
objectList2.sort(function(a,b){
return a.age - b.age;
});
//[WorkMate age: 20name: "jack", WorkMate age: 25 name: "tony", WorkMate age: 26 name: "stone"]