主要代碼:?
/**
*@description: 比較兩個字符串大小
*@author: JackieZheng
*@date: 2020-12-03 19:59:39
*/
function compare(a, b) {if (a == b) {return 0;} else {let lsta = a.toString().replace(/[一二三四五六七八九十百千萬億]+/g, ChineseToNumber).split(/(\d+)/);let lstb = b.toString().replace(/[一二三四五六七八九十百千萬億]+/g, ChineseToNumber).split(/(\d+)/);let l = Math.max(lsta.length, lstb.length);for (i = 0; i < l; i++) {if (lsta[i] != lstb[i]) {if (isNaN(lsta[i] - lstb[i])) {return lsta[i] > lstb[i] ? 1 : -1;} else {return lsta[i] - lstb[i] > 0 ? 1 : -1;}}}}
}/***@description: 漢字轉數字*@author: JackieZheng*@date: 2020-12-03 19:59:39*/
function ChineseToNumber(chnStr) {//目前已知Bug:類如"三千萬億"結果不正確chnStr = chnStr.indexOf("十") == 0 ? "一" + chnStr: chnStr;var chnNumChar = {零: 0,一: 1,二: 2,三: 3,四: 4,五: 5,六: 6,七: 7,八: 8,九: 9,兩: 2};var chnNameValue = {十: {value: 10,secUnit: false},百: {value: 100,secUnit: false},千: {value: 1000,secUnit: false},萬: {value: 10000,secUnit: true},億: {value: 100000000,secUnit: true}};var rtn = 0;var section = 0;var number = 0;var unit = 1;var secUnit = false;var str = chnStr.split('');for (var i = 0; i < str.length; i++) {var num = chnNumChar[str[i]];if (typeof num !== 'undefined') {number = num;if (num === 0) {unit = 1;}if (i === str.length - 1) {section += number * unit;}} else {unit = chnNameValue[str[i]].value;secUnit = chnNameValue[str[i]].secUnit;if (secUnit) {section = (section + number) * unit;rtn += section;section = 0;} else {section += (number * unit);}number = 0;unit = unit > 1 ? unit / 10 : unit;}}return rtn + section;
}
測試:
var arr=["學生12","學生1","學生三百五","學生2","學生十五"];arr.sort(compare)----------------------------------------------------------(5) ["學生1", "學生2", "學生12", "學生十五", "學生三百五"]
0: "學生1"
1: "學生2"
2: "學生12"
3: "學生十五"
4: "學生三百五"
length: 5
__proto__: Array(0)
?