基于JS模仿windows文件按名称排序效果
作个记录,主要是对数字的处理,如果数字的前面字符是相同的,则数字以值比较,而不是单个字符之间的比较。
functionSortLikeWin(v1,v2){ vara=v1.name; varb=v2.name; varreg=/[0-9]+/g; varlista=a.match(reg); varlistb=b.match(reg); if(!lista||!listb){ returna.localeCompare(b); } for(vari=0,minLen=Math.min(lista.length,listb.length);i<minLen;i++){ //数字所在位置序号 varindexa=a.indexOf(lista[i]); varindexb=b.indexOf(listb[i]); //数字前面的前缀 varprefixa=a.substring(0,indexa); varprefixb=a.substring(0,indexb); //数字的string varstra=lista[i]; varstrb=listb[i]; //数字的值 varnuma=parseInt(stra); varnumb=parseInt(strb); //如果数字的序号不等或前缀不等,属于前缀不同的情况,直接比较 if(indexa!=indexb||prefixa!=prefixb){ returna.localeCompare(b); } else{ //数字的string全等 if(stra===strb){ //如果是最后一个数字,比较数字的后缀 if(i==minLen-1){ returna.substring(indexa).localeCompare(b.substring(indexb)); } //如果不是最后一个数字,则循环跳转到下一个数字,并去掉前面相同的部分 else{ a=a.substring(indexa+stra.length); b=b.substring(indexa+stra.length); } } //如果数字的string不全等,但值相等 elseif(numa==numb){ //直接比较数字前缀0的个数,多的更小 returnstrb.lastIndexOf(numb+'')-stra.lastIndexOf(numa+''); } else{ //如果数字不等,直接比较数字大小 returnnuma-numb; } } } }
使用方法,Array.sort(SortLikeWin);
以上所述是小编给大家介绍的基于JS模仿windows文件按名称排序效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!