js实现中文数字排序
中文数字排序实现方法
在JavaScript中实现中文数字排序需要将中文数字转换为阿拉伯数字后再进行比较。以下是具体实现步骤:
创建中文数字映射表
建立中文数字与阿拉伯数字的对应关系,包括单位和零的情况:
const chineseNumMap = {
'零': 0, '一': 1, '二': 2, '三': 3, '四': 4,
'五': 5, '六': 6, '七': 7, '八': 8, '九': 9,
'十': 10, '百': 100, '千': 1000, '万': 10000, '亿': 100000000
};
中文转阿拉伯数字函数
实现转换函数处理复合中文数字(如"二百五十六"):

function chineseToNumber(chineseStr) {
let total = 0;
let currentVal = 0;
let previousUnit = 0;
for (let i = 0; i < chineseStr.length; i++) {
const char = chineseStr[i];
const num = chineseNumMap[char];
if (num === undefined) return NaN; // 非数字字符
if (num < 10) {
currentVal = num;
} else if (num >= 10) {
if (currentVal === 0) currentVal = 1;
currentVal *= num;
if (num > previousUnit) {
total += currentVal;
currentVal = 0;
} else {
total += currentVal;
currentVal = 0;
}
previousUnit = num;
}
}
return total + currentVal;
}
排序比较函数
创建可用于Array.sort()的比较函数:
function chineseNumberCompare(a, b) {
const numA = chineseToNumber(a);
const numB = chineseToNumber(b);
return numA - numB;
}
实际使用示例
对包含中文数字的数组进行排序:

const chineseNumbers = ['五', '十二', '三', '一百', '二十', '九'];
chineseNumbers.sort(chineseNumberCompare);
console.log(chineseNumbers);
// 输出: ["三", "五", "九", "十二", "二十", "一百"]
处理复杂情况
对于"两"、"廿"等特殊表达,需扩展映射表:
Object.assign(chineseNumMap, {
'两': 2, '廿': 20, '卅': 30, '卌': 40
});
性能优化建议
对于大量数据排序,可预先计算并缓存转换结果:
function optimizedSort(arr) {
return arr
.map(item => ({ original: item, value: chineseToNumber(item) }))
.sort((a, b) => a.value - b.value)
.map(item => item.original);
}
注意事项
- 该实现不支持小数中文数字
- 超大字面量(如"一兆")需要扩展单位映射
- 混合字符串(如"第1章")需要额外处理
- 繁体中文需要单独映射表
完整实现应包含错误处理和对各种边界情况的考虑。






