JavaScript混合字符串排序

发布于 2022-09-07 11:36:14 字数 514 浏览 21 评论 0

需求:

  1. 一个数组
  2. 数组的每一个元素都是一个字符串
  3. 字符串可能为空,即""
  4. 对该数组进行排序,特殊字符在最前,长度为0的字符串在最前,即要求3中的例子,然后是下划线,其他特殊字符串按JS内置规则排序就好

然后是数字(从小到大),大写字母,小写字母,最后是汉字,字母按照字母表顺序排序,汉字按照拼音来排序

举例

let a = ["", "A001", "V002", "V003", "_123", "133", "2334", "a001", "v004", "马龙", "中华", "中国"]
//排序后
// a = ["", "_123", "133", "2334", "A001", "V002", "V003", "a001", "v004", "马龙", "中国", "中华"]

PS:
我去掉了中英文混合的字符串,感觉加上了会更复杂的样子

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

撩人痒 2022-09-14 11:36:14
let arr = ["", "A001", "V002", "V003", "_123", "133", "2334", "大124", "小afaf", "a001", "v004", "马龙", "中华", "中国"];
arr.sort(function(a, b) {
    let max_length = Math.max(a.length, b.length),
        compare_result = 0,
        i = 0;
    while(compare_result === 0 && i < max_length) {
        compare_result = compare_char(a.charAt(i), b.charAt(i));
        i++;
    }
    return compare_result;
});

function compare_char(a, b) {
    var a_type = get_char_type(a),
        b_type = get_char_type(b);
    if(a_type === b_type && a_type < 4) {
        return a.charCodeAt(0) - b.charCodeAt(0);
    } else if(a_type === b_type && a_type === 4) {
        return a.localeCompare(b);
    } else {
        return a_type - b_type;
    }
}

function get_char_type(a) {
    var return_code = {
        nul: 0,
        symb: 1,
        number: 2,
        upper: 3,
        lower: 4,
        other: 5
    }
    if(a === '') {
        return return_code.nul; //空
    } else if(a.charCodeAt(0) > 127) {
        return return_code.other;
    } else if(a.charCodeAt(0) > 122) {
        return return_code.symb;
    } else if(a.charCodeAt(0) > 96) {
        return return_code.lower;
    } else if(a.charCodeAt(0) > 90) {
        return return_code.symb;
    } else if(a.charCodeAt(0) > 64) {
        return return_code.upper;
    } else if(a.charCodeAt(0) > 58) {
        return return_code.symb;
    } else if(a.charCodeAt(0) > 47) {
        return return_code.number;
    } else {
        return return_code.symb;
    }
}
console.log(arr);

写的乱了点凑活看吧

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文