首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

JavaScript 中文排序:localeCompare 替代 > 比較

     編輯:程式設計綜合問答

問題

用 a[prop] > b[prop] 排序中文,結果不符合拼音/筆畫順序(按 Unicode 碼點排序)。

解決方案:String.prototype.localeCompare

function getSortFun(order, sortBy) {
    return function(a, b) {
        const valA = a[sortBy];
        const valB = b[sortBy];
        if (order === 'asc') 
            return valA.localeCompare(valB, 'zh-CN', {sensitivity: 'variant'});
        else 
            return valB.localeCompare(valA, 'zh-CN', {sensitivity: 'variant'});
    };
}

// 使用
data.sort(getSortFun('asc', 'name'));

參數解析

對比示例

const arr = ['北京', '上海', '廣州', '深圳'];
// > 比較 (Unicode)
arr.sort((a,b)=>a>b?1:-1); 
// ["上海", "北京", "深圳", "廣州"] 錯誤

// localeCompare
arr.sort((a,b)=>a.localeCompare(b,'zh-CN'));
// ["北京", "廣州", "深圳", "上海"] 正確拼音序

總結

中文排序**必須用 localeCompare**,指定 'zh-CN' 區域。> 僅按碼點排序,不符合任何自然語言習慣。現代瀏覽器/Node.js 完整支援 ICU 規則,性能足夠優秀。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數值說明
locales'zh-CN'中文簡體排序規則(拼音)
options.sensitivity'variant'區分大小寫、音調、變體
options.ignorePunctuationtrue忽略標點(可選)
options.numerictrue數字按數值排序(如 "2" < "10")