基于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文件按名称排序效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!