You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Lodash sortBy多键排序不符合预期 大小写排序顺序异常

排序异常原因
  • _.sortBy 默认沿用JavaScript原生字符串比较逻辑,按单个字符的Unicode码点值判定大小
  • 大写字母的Unicode码点区间为U+0041-U+005A,小写字母的码点区间为U+0061-U+007A,所有大写字母的码点都小于小写字母
  • 你提到的两个词条中,Tetrachloroethene首字母为大写T(码点值84),cis-1,2-Dichloroethene首字母为小写c(码点值99),默认比较逻辑会判定大写T对应值更小,因此T开头的词条排在前面,和字母表顺序无关,完全是大小写差异导致的。
修正方法

不要直接传入字段名数组作为排序依据,改用自定义迭代函数,将参与排序的字符串统一转为全小写(或全大写)后再比较,即可实现不区分大小写的正确排序:

var temp = _.sortBy(array, [
  function (item) {
    return item.Chemical.toLowerCase();
  },
  function (item) {
    return item.LocName.toLowerCase();
  }
]);

如果需要适配带数字、特殊符号的词条,得到更符合日常阅读习惯的自然排序结果,可以使用原生Intl.Collator实现本地化排序:

// 初始化英文排序比较器,忽略大小写、重音差异
const enCollator = new Intl.Collator('en', { sensitivity: 'base' });
var temp = array.sort(function(a, b) {
  const chemicalCompare = enCollator.compare(a.Chemical, b.Chemical);
  if (chemicalCompare !== 0) return chemicalCompare;
  return enCollator.compare(a.LocName, b.LocName);
});

内容的提问来源于stack exchange,提问作者Kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 16:09:18