博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js实现仿windows文件按名称排序
阅读量:4946 次
发布时间:2019-06-11

本文共 2401 字,大约阅读时间需要 8 分钟。

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

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                 //数字的string18                 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

 

转载于:https://www.cnblogs.com/xlzhang/p/5625834.html

你可能感兴趣的文章
完成个人中心—导航标签
查看>>
Ext 中带有tbar按钮右侧对齐方法
查看>>
动态规划——H 最少回文串
查看>>
xenserver 主机cpu一段时间内的使用情况
查看>>
struts2验证规则validation配置文件命名方式总结
查看>>
注册表删除chrome插件
查看>>
python作业2 购物车
查看>>
POJ 2181 -- Jumping Cows
查看>>
Sprint 一周详细计划
查看>>
Window中C++进行精确计时的方法
查看>>
在引入的css或者js文件后面加参数的作用
查看>>
MFC窗体程序中添加调试控制台
查看>>
Windows Server 2012 Essentials [1]
查看>>
MSYS2 简单配置
查看>>
通用数据库设计——观念纠正
查看>>
BZOJ2555 SubString 【后缀自动机 + LCT】
查看>>
python 图像的离散傅立叶变换
查看>>
OOD沉思录 --- 类和对象的关系 --- 包含关系4
查看>>
2012年1月编程语言排行榜:Objective-C成为年度语言
查看>>
写给自己和设计师们---一个朋友
查看>>