Javscript 实现字符数串比对排序(包含数字及中文数字)
生活随笔
收集整理的這篇文章主要介紹了
Javscript 实现字符数串比对排序(包含数字及中文数字)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要代碼:?
/** *@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)?
總結
以上是生活随笔為你收集整理的Javscript 实现字符数串比对排序(包含数字及中文数字)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 统一设置网站html文件输出编码为utf
- 下一篇: 将excel多个工作表(表结构相同)合并