diff --git a/SrcJyAlist.js b/SrcJyAlist.js index ec6d2668..bca3144c 100644 --- a/SrcJyAlist.js +++ b/SrcJyAlist.js @@ -70,77 +70,59 @@ function getlist(data,isdir) { */ if(!isdir){ - //比较没有后缀的文件名 -function fileNoExtCompare(a, b) -{ -// 特殊字符判定 -var specialChars = "!#$%^~()-+=-"; -var firstCharA = a.charAt(0); -var firstCharB = b.charAt(0); -var spA = specialChars.indexOf(firstCharA); -var spB = specialChars.indexOf(firstCharB); -if(spA != spB) -{ -return (spA >= 0) ? -1 : 1 + 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); } -if(spA >= 0 && spB >= 0) -{ -if(firstCharA != firstCharB) -{ -return firstCharB - firstCharA; +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); +//数字的string +var 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 -{ -return fileNoExtCompare(a.substring(1), b.substring(1)) ; +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); } - -//判定比较内容是不是数值 -var nA = parseInt(a); -var nB = parseInt(b); -if(!isNaN(nA) && !isNaN(nB)) -{ - return nA - nB; } - -if(firstCharA == firstCharB) -{ - return fileNoExtCompare(a.substring(1), b.substring(1)) ; +//如果数字的string不全等,但值相等 +else if (numa == numb) { +//直接比较数字前缀0的个数,多的更小 +return strb.lastIndexOf(numb + '') - stra.lastIndexOf(numa + ''); } - -var isChFirstA = isChCode(firstCharA); -var isChFirstB = isChCode(firstCharB); -if(isChFirstA != isChFirstB) -{ - return isChFirstA ? 1 : -1; +else { +//如果数字不等,直接比较数字大小 +return numa - numb; } - -var aa = "1" + firstCharA; -var bb = "1" + firstCharB; - -//return a.localeCompare(b); -return aa.localeCompare(bb,'zh-CN'); } - -//比较带后缀的文件名 -function fileWithExtCompare(a, b){ -//debugger -var onlyNameA = a.substring(0, a.lastIndexOf(".")); -var onlyNameB = b.substring(0, b.lastIndexOf(".")); -var result = fileNoExtCompare(onlyNameA, onlyNameB); -if(result != 0){ -return result; } - -//比较后缀 -var extA = a.substring(a.lastIndexOf(".")); -var extB = b.substring(b.lastIndexOf(".")); -return extA.localeCompare(extB); } -list.sort(function(a,b){ - return fileWithExtCompare(a.name, b.name) -}); +list.sort(SortLikeWin); } }catch(e){