zoukankan      html  css  js  c++  java
  • js实现仿windows文件按名称排序

    作个记录,主要是对数字的处理,如果数字的前面字符是相同的,则数字以值比较,而不是单个字符之间的比较。

     1         function SortLikeWin(v1, v2) {
     2             var a = v1.name;
     3             var b = v2.name;
     4             var reg = /[0-9]+/g;
     5             var lista = a.match(reg);
     6             var listb = b.match(reg);
     7             if (!lista || !listb) {
     8                 return a.localeCompare(b);
     9             }
    10             for (var i = 0, minLen = Math.min(lista.length, listb.length) ; i < minLen; i++) {
    11                 //数字所在位置序号
    12                 var indexa = a.indexOf(lista[i]);
    13                 var indexb = b.indexOf(listb[i]);
    14                 //数字前面的前缀
    15                 var prefixa = a.substring(0, indexa);
    16                 var prefixb = b.substring(0, indexb);
    17                 //数字的string
    18                 var stra = lista[i];
    19                 var strb = listb[i];
    20                 //数字的值
    21                 var numa = parseInt(stra);
    22                 var numb = parseInt(strb);
    23                 //如果数字的序号不等或前缀不等,属于前缀不同的情况,直接比较
    24                 if (indexa != indexb || prefixa != prefixb) {
    25                     return a.localeCompare(b);
    26                 }
    27                 else {
    28                     //数字的string全等
    29                     if (stra === strb) {
    30                         //如果是最后一个数字,比较数字的后缀
    31                         if (i == minLen - 1) {
    32                             return a.substring(indexa).localeCompare(b.substring(indexb));
    33                         }
    34                         //如果不是最后一个数字,则循环跳转到下一个数字,并去掉前面相同的部分
    35                         else {
    36                             a = a.substring(indexa + stra.length);
    37                             b = b.substring(indexa + stra.length);
    38                         }
    39                     }
    40                         //如果数字的string不全等,但值相等
    41                     else if (numa == numb) {
    42                         //直接比较数字前缀0的个数,多的更小
    43                         return strb.lastIndexOf(numb + '') - stra.lastIndexOf(numa + '');
    44                     }
    45                     else {
    46                         //如果数字不等,直接比较数字大小
    47                         return numa - numb;
    48                     }
    49                 }
    50             }
    51         }

    使用方法,Array.sort(SortLikeWin);

     注:localecompare 比较中文的时候有问题,替换为

    function commonCompare(v1, v2){
      if(v1 === v2){
         return 0;
        }      
      else{
        return v1<v2?-1:1;
      }
    }    
  • 相关阅读:
    小程序动态添加input(一)
    vue样式穿透
    小程序判断用户是否授权位置信息
    【超详细】MySQL学习笔记汇总(四)之排序查询
    【超详细】MySQL学习笔记汇总(三)之进阶1、2测试
    【超详细】MySQL学习笔记汇总(二)之条件查询
    【超详细】MySQL学习笔记汇总(一)之基础查询
    【超详细】MakeDown(Typora)+PicGo+Gitee实现图床
    JavaDOC生成文档
    学习Hive遇到的问题
  • 原文地址:https://www.cnblogs.com/xlzhang/p/5625834.html
Copyright © 2011-2022 走看看