- 博客(0)
- 资源 (1)
- 收藏
- 关注
sortByLetter.js
ES6
根据字母表a-z,将字符数组归类排序
export const sortByAlphabet = (arr, key) => {
if (!String.prototype.localeCompare) {
console.error('浏览器不支持排序!')
return
}
let letters = '*abcdefghjklmnopqrstwxyz'.split('')
let zh = '阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀'.split('')
let segs = []
let curr
let isZhCn = /[\u4e00-\u9fa5]/
letters.forEach((letter, i) => {
curr = {groupName: letter, children: []}
arr.forEach((hanzi) => {
let mingzi = key === undefined ? hanzi : hanzi[key]
// 中文为首
if (isZhCn.test(mingzi[0])) {
let qianHz = zh[i - 1]
let xianHz = zh[i]
if (!qianHz || (qianHz.localeCompare(mingzi) <= 0 && mingzi.localeCompare(xianHz) === -1)) {
curr.children.push(hanzi)
}
} else {
// 英文为首
let qianHz = letters[i]
let xianHz = letters[i + 1]
if (!qianHz || (qianHz.localeCompare(mingzi) <= 0 && mingzi.localeCompare(xianHz) === -1)) {
curr.children.push(hanzi)
}
}
})
if (curr.children.length > 0) {
curr.children.sort((a, b) => {
if (key !== undefined) return a[key].localeCompare(b[key])
return a.localeCompare(b)
})
}
if (curr.groupName !== '*') segs.push(curr)
})
return segs
}
2020-01-09
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人