你的位置:首页 > Java教程

[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 = a.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);