如何在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"]
补充说明:
- 你原来的代码里还有个小错误:数组里的字段是
secction,但排序函数里写的是Control_num,这会导致排序无效,已经在上面的代码里修正了。 - 这个排序函数还兼容不同层级的索引,比如"6.2"会排在"6.2.1"前面,符合图书索引的常规逻辑。
内容的提问来源于stack exchange,提问作者Dante
相关产品推荐
相关产品推荐

