树状结构数据按照顺序排序

简介: 树状结构数据按照顺序排序

这里写两种实现,一种java,一种js

首先是js的

const list = [
  {titleNum: '1.1.1'}, 
  {titleNum: '1'},
  {titleNum: '10'},  
  {titleNum: '2'}
];
list.sort((a, b) => {
  const aLevels = a.titleNum.split('.').map(i => parseInt(i));
  const bLevels = b.titleNum.split('.').map(i => parseInt(i));
  const minLength = Math.min(aLevels.length, bLevels.length);
  for (let i = 0; i < minLength; i++) {
    if (aLevels[i] !== bLevels[i]) {
      return aLevels[i] - bLevels[i];
    } 
  }
  return aLevels.length - bLevels.length; 
});
console.log(list);

其次是java的:

Collections.sort(list,new Comparator<Chatr>(){
  @Override
  public int compare(Chatr o1,Chatr o2){
    String[] levels1=o1.getTitleNum().split("\\.");
    String[] levels2=o2.getTitleNum().split("\\.");
    int idx=0;
    while(idx<levels1.length && idx<levels2.length){
      int level1=Integer.parseInt(levels1[idx]);
      int level2=Integer.parseInt(levels2[idx]);
      if(level1 != level2){
        return Integer.compare(level1,level2);
      }
      idx ++;
    }
    return Integer.compare(levels1.length,levels2.length);
  }
});

以上。

相关文章
|
4月前
|
人工智能 自然语言处理 关系型数据库
向量数据库入门指南:从数学概念到AI核心基建,一篇文章讲透
本文以通俗类比讲透向量数据库三大核心:向量化计算(CPU流水线式加速)、向量嵌入(语义→数学坐标的翻译官)、向量数据库(专为“找相似”优化的AI记忆宫殿)。涵盖原理、选型、实践与评估,助你快速掌握这一AI时代关键基建。(239字)
|
2月前
|
SQL 关系型数据库 MySQL
MySQL InnoDB 锁机制全解:行锁 / 表锁 / 间隙锁 / 临键锁底层逻辑与死锁避坑指南
本文深入剖析MySQL InnoDB锁机制,直击高并发下90%性能瓶颈根源:锁认知偏差。详解事务隔离级别与索引结构两大前提,厘清行锁、间隙锁、临键锁本质及死锁成因,并提供索引设计、SQL编写、事务控制等生产级避坑实践,助开发者从原理到落地全面提升数据库稳定性与并发能力。
323 1
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
1389 0
|
SQL
SQL语句多个表查询,inner join的用法
SQL语句多个表查询,inner join的用法
844 0
Hutool工具BeanUtil.copyProperties实现自定义类型转换器之字符串转时间格式化
hutool工具BeanUtil.copyProperties在字符串转LocalDateTime时默认用的格式为yyyy-MM-ddTHH:mm:ss,所以需要自定义转换器才行,在转换时会优先使用自定义的。 在项目启动时执行一次此段代码即可。
1015 0
|
Web App开发 JavaScript 前端开发
【专栏】如何使用 Chrome DevTools 的断点功能提升前端调试效率, 花式打断点
【4月更文挑战第29天】本文介绍了如何使用 Chrome DevTools 的断点功能提升前端调试效率。从基本的行断点和函数断点,到更高级的条件断点、DOM 断点、XHR 断点和事件断点,以及代码注入断点,详细阐述了各种断点的设置和应用场景。通过断点调试实战案例,如异步操作、复杂逻辑和性能优化,展示断点在解决实际问题中的重要作用。掌握这些技巧能有效提高开发质量和效率。
1183 1
|
存储 缓存 安全
内存屏障,写屏障和读屏障
本文介绍了Java内存模型(JMM)的关键概念,包括主内存、工作内存、原子性操作、可见性和有序性,并详细解释了写屏障和读屏障的作用,它们是用来确保多线程环境中内存可见性和指令重排序一致性的同步操作。
601 1
|
存储 算法 Java
Java中递归
Java中递归
300 0
|
Unix Shell Linux
shell脚本转换为c代码的工具
将shell脚本转换成代码,并编译成二进制可执行文件,在linux系统下具有防调试跟踪机制
|
存储 弹性计算 网络安全
对象存储OSS产品常见问题之图片无法在网页显示如何解决
对象存储OSS是基于互联网的数据存储服务模式,让用户可以安全、可靠地存储大量非结构化数据,如图片、音频、视频、文档等任意类型文件,并通过简单的基于HTTP/HTTPS协议的RESTful API接口进行访问和管理。本帖梳理了用户在实际使用中可能遇到的各种常见问题,涵盖了基础操作、性能优化、安全设置、费用管理、数据备份与恢复、跨区域同步、API接口调用等多个方面。对象存储OSS产品常见问题之
2649 0