javascript 数组排序之 sort()
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=Edge,Chrome=1"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="renderer" content="webkit"> <title>Array.sort</title> </head> <body> <script> //很多人不清楚数组排序的具体原理. var arr=[1,2,3,4,5,10,20,30,40]; console.log(arr.sort()); //[1, 10, 2, 20, 3, 30, 4, 40, 5] //如果sort就提供我们这样一个排序功能,那不要也罢. //实际上,sort默认是把数组的每一项转换成字符串,再进行排序的. //所以,只看排序后数组中每一项的第一位的话,你发现它干的不错. //但是我们要告诉它,按照我们的规则排序,也就是从小到大排序. //sort方法可以接受一个函数作为参数,这个函数就是我们告诉javascript数组排序的规则. arr.sort(function(value1,value2){ if(value1<value2){ return -1; } else if(value1>value2){ return 1; }else{ return 0; } }); console.log(arr);//[1, 2, 3, 4, 5, 10, 20, 30, 40] //很多人迷惑了.其实只要习惯就好,这就是javascript的一个规则.或者说sort判断排序的一个规则. //两个参数value1 和 value2 分别代表数组中传入的每一项. value1 代表前一项,value2 代表后一项. //如果前一项 < 后一项 返回-1,否则返回1;这是什么意思呢? //如果你想太多了,就赶紧打住. //我是这样理解的: //如果我希望数组从小到大排序.那么我把数组的前一项和后一项作为参数传入比较函数中. //函数判断我传入的两个参数.如果第一项比第二项小,那么说明这两项已经是从小到大排序了.不需要再排了,返回-1(相当于标记了不需要排序的数) //如果第一项比第二项大,那么这两项需要进行排序,返回1(相当于true); //如果两项相等,返回0.(相当于false),不需要排序. //就这么简单.如果想知道更深层次的东西,就不是这里能学到的了. //现在我想从大到小排列: arr.sort(function(value1,value2){ if(value1<value2){ //我希望数组从大到小排序,前一项应该大于后一项,所以这个if()的条件,不符合我期望的数组中的规则,需要排序,返回1(正数) return 1; }else if(value1>value2){ //符合我期望的数组中的规则,不需要排序,返回-1(负数) return -1; }else{ //相等,不需要排序,返回0 return 0; } }); console.log(arr);//[40, 30, 20, 10, 5, 4, 3, 2, 1] //完毕 //基于幻想的理解并不算是理解,要想真正理解sort,还需要查看语言核心中的具体实现. </script> </body> </html>