javascript 使用 unicode 排序

新手上路,请多包涵

有很多通过某些属性(即“标题”)对某些 JSON 数组进行排序的示例。我们正在使用这样的比较函数:

 function sortComparer(a, b) {
        if (a.title == b.title)
            return 0;
        return a1 > b1 ? 1 : -1;
    }

问题是塞尔维亚拉丁字母顺序看起来像“A、B、C、Č、Ć、D、…”当使用上面的 sortComparer 时,我将 D 排在“Č”或“Ć”之前。知道如何根据当前文化语言进行排序吗?

原文由 Andrej Kaurin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 648
2 个回答

如果系统中的语言环境设置正确,那么您可以使用 localeCompare 方法而不是 大于 运算符来比较字符串 - 此方法是语言环境感知的。

 function sortComparer(a,b){
    return a.title.localeCompare(b.title)
};

原文由 Andris 发布,翻译遵循 CC BY-SA 3.0 许可协议

要使用自定义设置对数组进行排序,请执行以下操作:

  1. 创建一个具有自定义字母顺序的数组:

var alphabets = ["A", "B", "C", "Č", "Ć", "D","Dž","Đ","E","F","G","H","I","J","K","L","Lj","M","N","Nj","O","P","R","S", "ÛŒ","T","U","V","Z","Ž"];

  1. 创建测试数组列表:

var testArrray = ["B2","D6","A1","Ć5","Č4","C3"];

  1. 创建排序函数名称:
    function OrderFunc(){
             testArrray.sort(function (a, b) {
                 return CharCompare(a, b, 0);
             });
         }

  1. 创建 CharCompare 函数(索引:在“AAAC”之前排序“AAAB”):
     function CharCompare(a, b, index) {
     if (index == a.length || index == b.length)
         return 0;
     //toUpperCase: isn't case sensitive
     var aChar = alphabets.indexOf(a.toUpperCase().charAt(index));
     var bChar = alphabets.indexOf(b.toUpperCase().charAt(index));
     if (aChar != bChar)
         return aChar - bChar
     else
         return CharCompare(a,b,index+1)
    }

  1. 调用 OrderFunc 对 testArray 进行排序(结果将是:A1、B2、C3、C4、C5、D6)。

在线测试

祝你好运

原文由 Iman Bahrampour 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题