企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[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) } ~~~