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