JavaScript混合字符串排序

需求:

  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:

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


哆啦的时光机
浏览 787回答 1
1回答

慕田峪7331174

let arr = ["", "A001", "V002", "V003", "_123", "133", "2334", "大124", "小afaf", "a001", "v004", "马龙", "中华", "中国"];arr.sort(function(a, b) {&nbsp; &nbsp; let max_length = Math.max(a.length, b.length),&nbsp; &nbsp; &nbsp; &nbsp; compare_result = 0,&nbsp; &nbsp; &nbsp; &nbsp; i = 0;&nbsp; &nbsp; while(compare_result === 0 && i < max_length) {&nbsp; &nbsp; &nbsp; &nbsp; compare_result = compare_char(a.charAt(i), b.charAt(i));&nbsp; &nbsp; &nbsp; &nbsp; i++;&nbsp; &nbsp; }&nbsp; &nbsp; return compare_result;});function compare_char(a, b) {&nbsp; &nbsp; var a_type = get_char_type(a),&nbsp; &nbsp; &nbsp; &nbsp; b_type = get_char_type(b);&nbsp; &nbsp; if(a_type === b_type && a_type < 4) {&nbsp; &nbsp; &nbsp; &nbsp; return a.charCodeAt(0) - b.charCodeAt(0);&nbsp; &nbsp; } else if(a_type === b_type && a_type === 4) {&nbsp; &nbsp; &nbsp; &nbsp; return a.localeCompare(b);&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return a_type - b_type;&nbsp; &nbsp; }}function get_char_type(a) {&nbsp; &nbsp; var return_code = {&nbsp; &nbsp; &nbsp; &nbsp; nul: 0,&nbsp; &nbsp; &nbsp; &nbsp; symb: 1,&nbsp; &nbsp; &nbsp; &nbsp; number: 2,&nbsp; &nbsp; &nbsp; &nbsp; upper: 3,&nbsp; &nbsp; &nbsp; &nbsp; lower: 4,&nbsp; &nbsp; &nbsp; &nbsp; other: 5&nbsp; &nbsp; }&nbsp; &nbsp; if(a === '') {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.nul; //空&nbsp; &nbsp; } else if(a.charCodeAt(0) > 127) {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.other;&nbsp; &nbsp; } else if(a.charCodeAt(0) > 122) {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.symb;&nbsp; &nbsp; } else if(a.charCodeAt(0) > 96) {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.lower;&nbsp; &nbsp; } else if(a.charCodeAt(0) > 90) {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.symb;&nbsp; &nbsp; } else if(a.charCodeAt(0) > 64) {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.upper;&nbsp; &nbsp; } else if(a.charCodeAt(0) > 58) {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.symb;&nbsp; &nbsp; } else if(a.charCodeAt(0) > 47) {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.number;&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; return return_code.symb;&nbsp; &nbsp; }}console.log(arr);写的乱了点凑活看吧
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript