其他分享
首页 > 其他分享> > js 数组万能sort排序方法

js 数组万能sort排序方法

作者:互联网

 排序顺序规则:数字0=》数字非0开头=》字母开头=》汉字开头=》其他开头  排序逻辑:先按以上排序顺序将数组分为多个数组,再使用数组的concat方法将拆分的数组按顺序拼成一个新的数组。  详细:   (1).将0开头和非0开头分开是因为,0开头的必须在非0开头的前面,但使用parseInt转换后013就变成了13。   (2).只有数字做了进一步判断,如果使用parseInt转换后的数字相等,则按照系统默认的localeCompare方法进行排序,此时数字相等,localeCompare方法会根据系统排序方法对后续字符进行排序。   (3).简单分析下sort的比较函数:返回值为负数则将位置前移一项,为正数和0则保持不变。

代码:

 1   // 数组排序
 2         arraySort(list, filedname) {
 3             var rankArr = []
 4             // 筛选出数字0开头的集合
 5             var zeroArr = list.filter((ele, index) => {
 6               if (Number(ele[filedname].substr(0, 1)) === 0) {
 7                     return !isNaN(Number(ele[filedname].substr(0, 1)))
 8                 }
 9             })
10             // 数字0开头排序
11             zeroArr = zeroArr.sort((a, b) => {
12                 // return parseInt(a[filedname]) - parseInt(b[filedname])
13                 return a[filedname].replace(/[^0-9]/ig, '') - b[filedname].replace(/[^0-9]/ig, '')
14             })
15             rankArr = zeroArr
16             // 筛选出数字非0开头的集合
17             var numArr = list.filter((ele, index) => {
18                 if (Number(ele[filedname].substr(0, 1)) !== 0) {
19                     return !isNaN(Number.parseInt(ele[filedname].substr(0, 1)))
20                 }
21             })
22             // 数字非0开头排序
23             numArr = numArr.sort((a, b) => {
24                 if (Number.parseInt(a[filedname]) - Number.parseInt(b[filedname]) == 0) { // 如果数字相等 再按系统默认顺序排序
25                     return a[filedname].localeCompare(b[filedname])
26                 }
27                 else {
28                     return Number.parseInt(a[filedname]) - Number.parseInt(b[filedname])
29                 }
30             })
31             // 筛选出大写字母开头的
32             var regUpper = /^[A-Za-z]+$/
33             var upperArr = list.filter((ele, index) => {
34                 return regUpper.test(ele[filedname].substr(0, 1))
35             })
36             // 大写字母开头排序
37             upperArr = upperArr.sort((a, b) => {
38                 return a[filedname].localeCompare(b[filedname])
39             })
40             // 筛选出汉字开头开头的
41             var reg = new RegExp('^[\u4e00-\u9fa5]')
42             var wordArr = list.filter((ele, index) => {
43                 return reg.test(ele[filedname].substr(0, 1))
44             })
45             // 汉字开头排序
46             wordArr = wordArr.sort((a, b) => {
47                 return a[filedname].localeCompare(b[filedname])
48             })
49             // 剩余其他的开头
50             var otherArr = list.filter((ele, index) => {
51                 return isNaN(Number(ele[filedname].substr(0, 1))) && !reg.test(ele[filedname].substr(0, 1)) && !regUpper.test(ele[filedname].substr(0, 1))
52             })
53             // 剩余其他的开头排序
54             otherArr = otherArr.sort((a, b) => {
55                 return a[filedname].localeCompare(b[filedname])
56             })
57             list = rankArr
58             list = list.concat(numArr, upperArr, wordArr, otherArr)
59             return list;
60         },

 

 

标签:sort,return,list,filedname,ele,开头,js,排序
来源: https://www.cnblogs.com/Hush-/p/16088009.html