[TOC]
### 普通排序(升序a-Z)
`.sort()` 方法会遍历数组,依次比较相邻的数值,前一位小于后一位返回负数,相等返回0,大于返回正数。该方法会直接更改原数组,不返回数组副本。
~~~
array.sort((a, b) => a - b)
~~~
### 中文排序(升序a-Z)
>[success] 设置`numeric`属性为`true`可以对让数字字符按数值大小排序,而不是按首字符排序,该方法排序完成后顺序: 其它字符 - 数字 - 中文 - 英文
~~~
array.sort((a, b) =>
a.localeCompare(b, 'zh-Hans-CN', { sensitivity: 'accent', numeric: true }))
~~~
### 自定义排序顺序(升序a-Z)
eg: 排序顺序为:英文 - 中文 - 数字 - 其它字符
~~~
array.sort((a, b) => a.localeCompare(b, 'zh-Hans-CN', { sensitivity: 'accent', numeric: true }))
const sortResult = handleSortResult(array)
handleSortResult(res) {
const regStr = /[\u4e00-\u9fa5]/
const regAZ = /[a-z]/i
const regN = /[0-9]/
const sortFuction = (index, arr, regs) => {
for (let i = index; i < arr.length; i++) {
if (regs.test(arr[i].charAt(0))) {
return i
}
}
return false
}
const sortChina = (index, arr) => sortFuction(index, arr, regStr)
const sortNumber = (index, arr) => sortFuction(index, arr, regN)
const sortEnglish = (index, arr) => sortFuction(index, arr, regAZ)
let num = sortNumber(0, res)
let cn = sortChina(num || 0, res )
let en = sortEnglish(cn || num || 0, res)
en = en === 0 ? 0 : en || res.length
cn = cn === 0 ? 0 : cn || en
num = num === 0 ? 0 : num || cn
// console.error('其它', res.slice(0, num))
// console.error('数字', res.slice(num, cn))
// console.error('中文', res.slice(cn, en))
// console.error('英文', res.slice(en, res.length))
const result = [...res.slice(en, res.length), ...res.slice(cn, en), ...res.slice(num, cn), ...res.slice(0, num)]
sortAfter.innerHTML = JSON.stringify(result)
}
~~~