js版本号比较

版本号比较

Introduce

请用熟悉的变成语言,编程实现一个比较任意两个软件版本号大小的函数,如1.2.3a和1.2.4b比较,后者版本号更大,请考虑各种情况,不可以使用系统提供的比较函数

Tool

  1. javascript
  2. chrome

Idea

明确版本号的几个表现

1. 长度不确定。
2. 是否含有字母不确定

明确大小之间的区别

1. 1.2.3 < 1.2.4 
2. 1.2.3 < 1.2.3.a
3. 1.2.3 < 1.2.3a
4. 1.2.3.a < 1.2.3.b
5. 1.2.3a < 1.2.3b
6. 1.2.3 < 1.2.3.1
7. 1.2.3 < 1.2.4.1
8. 1.2.3a = 1.2.3.a
定义几个类型。 a是测试版,b是正式版,c是附加版,按照字典顺序增加
不存在1.2.3a1.2.3a这种情况,每家公司的版本号都是同一个规范,所以我按照一样大来比较他们

Thought

  1. 查看给定的字符串,如果只有一个字母,且在最后,就将字母换成 . + ascii,否则出错
  2. 比较函数只允许传入两个参数,多余或少于全部扔出一个错误
  3. 将传入的参数按照 。 作为分割拆成数组,从头到尾进行比较。 如果大于,小于直接出结果,否则一直继续,直到某一个先结束,则另一个大,否则相等

Code

// 判断字符串是否以指定字符串结尾
  function endWith(string, str) {
    if (arguments.length != 2) {
      throw "传入的参数数量不对。"
    }
    return string.slice(-str.length) == str;
  }
  // 如果有字母,那就把所有的字母转为.ascii
  function formatString () {
    if (arguments.length != 1) {
      throw "无字符串,无法格式化";
    }
    var reg = /([a-zA-Z])/g;
    var regarray = arguments[0].match(reg);
    if (regarray == null) {
      return arguments[0].split('.');
    }
    if (regarray  && regarray.length != 1) {
      throw "格式错误,只允许出现一个字母";
    }
    var regString = regarray.join('');
    if (endWith(arguments[0], regString) != true) {
      throw "传入的版本号有错";
    }
    return arguments[0].replace(regString, "." + regString.charCodeAt()).split('.');
  }
  function myCompare() {
    if(arguments.length > 2) {
      throw "目前只允许比较两个版本号";
    } else if (arguments.length < 2){
      throw "比较版本必须传入参数";
    } else {
      if (arguments[0] == arguments[1]) {
        return 0;
      }
      var arr1 = formatString(arguments[0]);
      var arr2 = formatString(arguments[1]);
      var length = Math.min(arr1.length, arr2.length);
      for (var i = 0 ; i != length; i ++) {
        if (arr1[i] > arr2[i]) {
          return 1;
        } else if (arr1[i] < arr2[i]) {
          return -1;
        } else {

        };
      }
      if (length == arr1.length) {
        return -1;
      } else {
        return 1;
      }
    }
  }
  console.log(myCompare("2.3.1", "2.3.1")); 
  // 长度一样,无字母,且相等
  console.log(myCompare("2.5.1.a", "2.5.1.a"));
  console.log(myCompare("2.5.1a", "2.5.1a"));
  // 长度一样,有字母,且相等
  console.log(myCompare("2.5.1a", "2.5.1b"));
  // 长度一样,有字母,字母不等 
  console.log(myCompare("2.5.1", "2.4.1.6"));
  // 长度后者大,无字母,前者大
  console.log(myCompare("2.3.1", "2.4.1.6"));
  // 长度后者大,无字母,后者大
  console.log(myCompare("2.5.1a", "2.4.1.6"));
  // 长度后者大,有字母,前者大
  console.log(myCompare("2.3.1.a", "2.4.1.6"));
  // 长度后者大,有字母,后者大

pic

测试结果

writer&contact

{
  "name":"Jontyy" , 
  "email": " jontyy@163.com"
}

gitHub

https://github.com/YJD199798

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值