您现在的位置是:首页>学习分享
js实现中文排序、分类。 2019-11-02 539

localeCompare() 方法

用本地特定的顺序来比较两个字符串。说明比较结果的数字。如果 stringObject 小于 target,则 localeCompare() 返回小于 0 的数。如果 stringObject 大于 target,则该方法返回大于 0 的数。如果两个字符串相等,或根据本地排序规则没有区别,该方法返回 0。

说明

把 < 和 > 运算符应用到字符串时,它们只用字符的 Unicode 编码比较字符串,而不考虑当地的排序规则。以这种方法生成的顺序不一定是正确的。例如,在西班牙语中,其中字符 “ch” 通常作为出现在字母 “c” 和 “d” 之间的字符来排序。

localeCompare() 方法提供的比较字符串的方法,考虑了默认的本地排序规则。ECMAscript 标准并没有规定如何进行本地特定的比较操作,它只规定该函数采用底层操作系统提供的排序规则。

如下:可以用对中文以拼音字母进行分类排序

const arr = [
    { name: '阿坝藏族羌族自治州' }, 
    { name: '包头' },
    { name: '阿克苏地区' },
    { name: '沧州市' },
    { name: '昌都市' },
    { name: '北京' }
]

  // 中文按拼音排序
function asLetterSort(arr) {
    let letters = "*ABCDEFGHJKLMNOPQRSTWXYZ".split('')
        , zh = "阿八嚓哒妸发旮哈讥咔垃痳拏噢妑七呥扨它穵夕丫帀".split('')
        , arr1 = []
        , curr = {}
    letters.forEach((letteri=> {
        curr = { 
            letter,
            data: []
        }
        arr.forEach(item => {
            if ((!zh[i - 1] || zh[i - 1].localeCompare(item.name) <= 0) && item.name.localeCompare(zh[i]) == -1) {
                curr.data.push(item)
            }
        })
        if (curr.data.length) {
            curr.data.sort((ab=> a.name.localeCompare(b.name))
            arr1.push(curr)
        }
    })
    return arr1
}
console.log(JSON.stringify(asLetterSort(arr)))

运行如下:

虽然可以方便的比较两个中文的顺序 但是由于中文汉字有多音字的关系  有时候并不是你所想的那样  此处有bug,在做选址列表的时候排序出来的长沙市被归类到Z里面去了,所以简单的中文拼音可以用用,复杂的话还是建议建表分类存储。

文章评论
小程序端
  • 微信公众号
  • 我的微信

Copyright © www.zhangqingblog.com All Rights Reserved.

备案号:鄂ICP备18005731号-2