From 31d4e8c56d74b81bf395a153f905910427e2b1e2 Mon Sep 17 00:00:00 2001 From: src48597962 <48597962@qq.com> Date: Sat, 3 Feb 2024 20:58:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20'SrcJuPublic.js'?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SrcJuPublic.js | 56 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/SrcJuPublic.js b/SrcJuPublic.js index 3106c312..93b90d06 100644 --- a/SrcJuPublic.js +++ b/SrcJuPublic.js @@ -105,7 +105,7 @@ function selectSource(selectType) { return "toast://当前分类无接口" } if(getItem('sourceListSort','update') == 'name'){ - sourcenames.sort(); + sourcenames.sort(SortList); } //return $(sourcenames,3,"选择 "+selectType+" 主页源").select((runMode,sourcename,cfgfile,Juconfig) => { hikerPop.selectCenterIcon({iconList: sourcenames, title: selectType + ">主页源>" + sourcename, columns: 2, click(input) { @@ -436,4 +436,56 @@ function JySearch(sskeyword,sstype) { }else{ return "hiker://search?rule=聚影√&s=" + sskeyword; } -} \ No newline at end of file +} + +function SortList(v1, v2) { + var a = v1.name || v1.title; + var b = v2.name || v2.title; + 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); + //数字的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 { + //数字的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; + } + } + } +}