首页 > 其他分享 >js 实现版本号排序

js 实现版本号排序

时间:2022-12-29 14:59:40浏览次数:53  
标签:return 版本号 length js v1 v2 let 排序

// 方法一:从左到右迭代,从高位判断,返回高位的大小结果 注意:仅适用于版本号各个位的位数相同
let versions = ["1.45.0", "1.5", "6", "2.3.4.5"];
versions = versions.sort((a, b) => {
  let arr1 = a.split('.');
  let arr2 = b.split('.');
  let i = 0;
  while (true) {
    let s1 = arr1[i];
    let s2 = arr2[i];
    i++;
    if (s1 == undefined || s2 == undefined) {
      return arr1.length - arr2.length;
    }
    if (s1 == s2) {
      continue;
    }
    return s1 - s2;
  }
})

console.log(versions); //[ '1.5', '1.45.0', '2.3.4.5', '6' ]


// 方法二:全部转为小数,比小数的大小,注意:仅适用于版本号各个位的位数相同
let arr = ["3.1.4.512", "0.2.5.4", "0.2.23.456", "0.3.456", "1.0"];

arr.sort((a, b) => {
    return Number("0." + a.split(".").join("")) - Number("0." + b.split(".").join(""));
});

console.log(arr); //[ '0.2.23.456', '0.2.5.4', '0.3.456', '1.0', '3.1.4.512' ]

参考链接:https://blog.csdn.net/jiong9412/article/details/124776279

// 方法三,通过 点 将版本号分割为数组,如果版本号长度不同,则填入 0,分别比较每一位的大小,可以准确判断每一位的大小
let compareVersion = function (v1, v2) {
    // console.log({v1, v2})
    if (typeof v1 === "undefined" || typeof v2 === "undefined") {
        console.error('请指定要对比的两个版本号', {v1, v2})
        return
    }

    v1 = v1.split('.')
    v2 = v2.split('.')
    const maxLength = Math.max(v1.length, v2.length)

    // 补全
    while (v1.length < maxLength) {
        v1.push('0')
    }
    while (v2.length < maxLength) {
        v2.push('0')
    }

    for (let i = 0; i < maxLength; i++) {
        let num1 = parseInt(v1[i])
        let num2 = parseInt(v2[i])

        if (num1 > num2) {
            return 1
        } else if (num1 < num2) {
            return -1
        }
    }

    return 0
}

compareVersion('0.5.1','0.302.1')   // -1 , 说明前者小于后者

 

标签:return,版本号,length,js,v1,v2,let,排序
From: https://www.cnblogs.com/beileixinqing/p/17012508.html

相关文章

  • 大整数排序
    题目描述小南有n个整数,这些整数都非常大,所以没有办法采用整数排序的方法处理,请聪明的你帮小南编写程序完成这些整数由小到大的排序。输入输入包含多组测试用例。......
  • vue+nuxtJs+monaco制作Monaco Editor编辑器
    目录前言一、版本二、使用前配置nuxt.config.js三、使用四、附录1.kind提示图标类型2.默认action前言使用版本较低一、版本二、使用前配置nuxt.config.js实现下方......
  • [JZOJ3864]【JSOI2014】歌剧表演
    DescriptionSolution这题非常有意思。本来我想各种二进制搞一波,但我看到数据后我放弃了。。。其实这题十分的水。我们把目前分辨不出的放在同一集合。那么对于演出操作,就......
  • 随手记(五):js函数参数默认值+热更新失效问题+常见操作符
    1.js函数参数ES5写法如果函数在调用时未提供隐式参数,参数会默认设置为: undefinedfunctionmyFunction(x,y){y=y||0;}ES6写法functionmyFunction(x,......
  • 在前端js worker里使用dom并且加载jquery
    四个工具:nodejs+npmnpm安装的jsdomnpm安装的jquerynpm安装的browserify网址:browserify:https://browserify.org/jsdom:https://github.com/jsdom/jsdom/安......
  • js判断是否为空对象
    一、js判断是否为空对象https://www.cnblogs.com/sefaultment/p/9444345.html方案1:vardata={};varb=JSON.stringify(data)=="{}";alert(b);//true方案......
  • React.js 和 Spring Data REST(二)
    第2部分-超媒体控件在上一节,您了解了如何使用SpringDataREST创建后端工资单服务来存储员工数据。它缺乏的一个关键功能是使用超媒体控件和链接导航。相反,它对路径进......
  • React.js 和 Spring Data REST(三)
    第4部分-事件在上一节,您引入了条件更新以避免在编辑相同数据时与其他用户发生冲突。您还学习了如何使用乐观锁定对后端的数据进行版本控制。如果有人编辑了同一记录,您会......
  • JS 鼠标位置信息说明
    clientX鼠标相对于浏览器(这里说的是浏览器的有效区域)左上角x轴的坐标;不随滚动条滚动而改变;clientY鼠标相对于浏览器(这里说的是浏览器的有效区域)左上角y轴的坐标;不......
  • 使用SRS和JSWebrtc实现实时播放视频
    使用SRS搭建视频服务器参见官方地址:https://ossrs.net/lts/zh-cn/docs/v5/doc/getting-started-buildhttps://github.com/ossrs/srs修改srs.conf文件将rtc节点下的rt......