利用sort对版本号进行排序

给定一个版本号数组['4.1', '4.7.1', '4.8', '4.8.0', '4.10', '5'] ,按照规则进行排序

1、'4.8'要排在'4.8.0'前面

2、'4.1'要排在'4.10'前面

function rule (str1, str2) {

  var arr1 = str1.split('.'),   //去除'.',将剩下的数字转换为数组
      arr2 = str2.split('.'),
      minLen = Math.min(arr1.length, arr2.length),   //取出两个数组中的最小程度
      maxLen = Math.max(arr1.length, arr2.length);   //最大长度
  
  //以最短的数组为基础进行遍历
  for(let i=0; i<minLen; i++) {

    //这里需要转换后才进行比较,否则会出现'10'<'7'的情况
    if(parseInt(arr1[i]) > parseInt(arr2[i])) {  
      return 1;  //返回一个大于0的数,表示前者的index比后者的index大
    } else if(parseInt(arr1[i]) < parseInt(arr2[i])) {
      return -1;  //返回一个小于0的数,表示前者的index比后者的index小
    } 

    //因为不只进行一次计较,所以这里不对相等的两个数进行处理,否则有可能第一次比较就返回,不符合要求

    //这个是为了区分'4.8'和'4.8.0'的情况
    //在前面的比较都相同的情况下,则比较长度
    //位数多的index大
    if (i+1 == minLen){  
      if(arr1.length > arr2.length) {
        return 1;
      } else {
        return -1;
      }
    }
  }
}

versions.sort(rule);

// return ['4.1', '4.7.1', '4.8', '4.8.0', '4.10', '5']

猜你喜欢

转载自blog.csdn.net/zhongshanxian/article/details/81544990
今日推荐