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

如何对含字母数字的Object数组按指定size规则排序

解决方案:按指定规则排序含混合字母数字的size字段

思路分析

要实现你想要的排序效果,核心是分两步处理:

  • 先给SHORT、REG、LONG三个后缀定义优先级,确保分组顺序符合要求
  • 同一后缀组内,把size里的数字转为整数,按数值升序排列

完整代码实现

var data = [ 
  {size: "40 SHORT", avail: true}, {size: "46 LONG", avail: true}, 
  {size: "42 SHORT", avail: true}, {size: "40 REG", avail: true}, 
  {size: "42 LONG", avail: true}, {size: "42 REG", avail: true}, 
  {size: "44 REG", avail: true}, {size: "44 LONG", avail: true}, 
  {size: "46 REG", avail: true}, {size: "48 REG", avail: true}, 
  {size: "44 SHORT", avail: true}, {size: "38 REG", avail: true}, 
  {size: "40 LONG", avail: true}, {size: "48 LONG", avail: true}, 
  {size: "38 SHORT", avail: true} 
];

// 定义后缀优先级:SHORT排最前,其次是REG,最后是LONG
const suffixPriority = { SHORT: 0, REG: 1, LONG: 2 };

// 执行排序
data.sort((itemA, itemB) => {
  // 拆分size字段为数字字符串和后缀部分
  const [numStrA, suffixA] = itemA.size.split(' ');
  const [numStrB, suffixB] = itemB.size.split(' ');
  
  // 先按后缀优先级排序
  if (suffixPriority[suffixA] !== suffixPriority[suffixB]) {
    return suffixPriority[suffixA] - suffixPriority[suffixB];
  }
  
  // 后缀相同则按数字升序排列(转整数避免字符串排序的坑)
  return parseInt(numStrA, 10) - parseInt(numStrB, 10);
});

// 此时data即为你期望的排序结果
console.log(data);

代码细节说明

  1. 后缀优先级映射:用对象给每个后缀分配数字值,排序时通过数值差快速确定顺序,保证SHORT→REG→LONG的分组逻辑。
  2. 拆分size字段:通过split(' ')把"数字 后缀"格式的字符串拆分开,方便分别处理排序条件。
  3. 数字转整数:如果直接用字符串比较数字,会出现"100"排在"9"前面的错误,转成整数后才是真正的数值升序。

运行这段代码后,data数组就会完全匹配你给出的期望输出顺序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:42:04