w3school上对sort()用法的定义为:arrayObject.sort(sortby)
;
顾名思义 :排序对象.排序(排序方法)
arrayObject
直接 跳过了。sort
详解也暂时先跳过,我略看了下源码,对于arrayObject
的排序并非单独使用的一种,个数少的时候用的插入排序,个数多的时候用的快速排序。
直接说 sortby
的用法。json
sortby 是一个 返回函数 ,表示排序的依据,
它有俩个参数,分别为须要比较的俩个数(机器的排序是经过俩俩比较来进行排序的),
基本用法 :function(a,b){return a与b的比较结果}
sortby 会根据返回值 正数/0/负数 来进行排序。正数会顺序颠倒,负数和0顺序不动。数组
简单的数字排序:
先讲下浅层次的原理:函数
好比说 [1,2].sort((a,b)=>a-b)
这个比较只有一次 1和2 比较,代入函数,sortby返回值 为 -1 ,那么 1和2 顺序不变。
若是反过来[1,2].sort((a,b)=>b-a)
sortby返回值为1 ,那么1和2 的顺序就变了。
总结下也用法:
从小到大排序 array.sort((a,b)=>a-b)
;
从大到小排序:array.sort((a,b)=>b-a)
;code
复杂点的Json排序。
这个有点相似于dataTable
中的排序。
我平时建立一个数据表的时候,也都是经过json数组 遍历建立的。
好比说:let data = [{name: 'a',age:14},{name: 'd',age:10},{name: 'c',age:32},{name: 'b',age:5}]
;对象
首先经过name来排序。排序
data.sort((a,b)=>a['name'].localeCompare(b['name']));
localeCompare表示本地默认排序方式。a['name'].localeCompare(b['name'])
表示按照本地排序的方式,以a.name与b.name的排序方式来排序data;源码
若是想反过来排序的话怎么办的话:
上面说过,sortby的排序只根据正数/0/负数,那么字母之间确定也是有这样的大小规律,倒序排序的话,只要把返回值变成其相反数便可。b['name'].localeCompare(a['name'])
;
或者-(a['name'].localeCompare(b['name']))
;io
经过age排序
age排序和上面的数字排序是同样的使用方法,从a-b
变成了a[age]-b[age]
;function
再复杂点的中文排序:原理
其实中文排序简单粗暴地转出拼音排序就能够了...
为何说复杂呢,是由于要导入一个巨大的js,并且还须要转行成拼音。
好比说:
let pinyin = {a:"\u554a\u963f\u9515", ai:"\u57c3\u6328\u54ce\u5509\u54c0\u7691\u764c\u853c\u77ee\u827e\u788d\u7231\u9698\u8bf6\u6371\u55f3\u55cc\u5ad2\u7477\u66a7\u7839\u953f\u972d", ...}
获取拼音的方法:
function(word){ for(let key in pinyin){ if(pinyin[key].includes(word)){ return key; } }}
而后就能够按照字母的排序方式来进行排序了。