将数组按 a-z 排序

  • /**
  • * 将数组按 a-z 排序
  • * 返回格式 { segs:[{ initial: 'a-z', data: [原数据 1, 原数据 2...] }] }
  • * 参数格式 [{titleName: 'xxx'}]
  • */
  • export function azSort(arr) {
  • if (arr.length === 0) return
  • if (!String.prototype.localeCompare) return null
  • var letters = '*ABCDEFGHJKLMNOPQRSTWXYZ'.split('')
  • var zh = '阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀'.split('')
  • var segs = [] // 存放数据
  • var res = {}
  • let curr
  • var re = /[^\u4e00-\u9fa5]/// 中文正则
  • var pattern = new RegExp('[`\\-~!@#$^&*()=|{}\':;\',\\[\\].<>《》/?~!@#¥……&*()——|{}【】‘;:”“\'。,、?12345678990]') // 特殊符号
  • letters.filter((items, i) => {
  • curr = {
  • initial: '', // 字母
  • data: [] // 数据
  • }
  • arr.map((v, index) => {
  • // 特殊字符
  • if (pattern.test(v.titleName[0])) {
  • if ((!zh[i - 1] || zh[i - 1].localeCompare(v.titleName) <= 0) && v.titleName.localeCompare(zh[i]) === -1) {
  • curr.data.push(v)
  • }
  • }
  • // 判断首个字是否是中文
  • if (re.test(v.titleName[0])) {
  • // 英文
  • if (v.titleName[0].toUpperCase() === items) {
  • curr.data.push(v)
  • }
  • } else {
  • // 中文
  • if ((!zh[i - 1] || zh[i - 1].localeCompare(v.titleName) <= 0) && v.titleName.localeCompare(zh[i]) === -1) {
  • curr.data.push(v)
  • }
  • }
  • })
  • if (curr.data.length) {
  • curr.initial = letters[i]
  • segs.push(curr)
  • curr.data.sort((a, b) => {
  • return a.titleName.localeCompare(b.titleName)
  • })
  • }
  • })
  • res.segs = Array.from(new Set(segs)) // 去重
  • return res
  • }

 

版权声明:
作者:灰糖
链接:https://guwenhan.com/jszaazpx/
来源:灰糖笔记
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>