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

如何在VueJS中实现类图书索引格式的对象数组排序?

如何实现图书索引格式的数组排序?

你遇到的问题根源在于直接对索引字符串做普通的字符串比较——字符串排序是按字符的ASCII码顺序来的,比如"10"的首字符'1'比'6'的ASCII码小,所以"10..."会排在"6..."前面,这显然不符合图书索引的层级排序逻辑。

要实现符合图书索引的排序,我们需要把每个索引字符串拆分成数字数组,然后按层级逐一比较(先比较第一位数字,再第二位,以此类推)。下面是完整的解决方案:

const myarray = [ 
  {'secction': '6.2.3','title': 'a'}, 
  {'secction': '6.2.2','title': 'b'}, 
  {'secction': '11.3.1','title': 'bn'}, 
  {'secction': '10.5.1','title': 'z'}, 
  {'secction': '10.4.1', title: 'da'} 
];

// 自定义图书索引排序函数
myarray.sort((a, b) => {
  // 将索引字符串按`.`分割并转成数字数组
  const aSections = a.secction.split('.').map(Number);
  const bSections = b.secction.split('.').map(Number);
  
  // 遍历每一层级比较数字
  for (let i = 0; i < Math.max(aSections.length, bSections.length); i++) {
    // 若某一层级不存在,默认视为0(比如"6.2"会被当作"6.2.0")
    const aVal = aSections[i] || 0;
    const bVal = bSections[i] || 0;
    
    if (aVal !== bVal) {
      return aVal - bVal;
    }
  }
  // 所有层级都相同,返回0保持原顺序
  return 0;
});

// 验证排序结果
console.log(myarray.map(item => item.secction));
// 输出: ["6.2.2", "6.2.3", "10.4.1", "10.5.1", "11.3.1"]

补充说明:

  1. 你原来的代码里还有个小错误:数组里的字段是secction,但排序函数里写的是Control_num,这会导致排序无效,已经在上面的代码里修正了。
  2. 这个排序函数还兼容不同层级的索引,比如"6.2"会排在"6.2.1"前面,符合图书索引的常规逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:06:12