簡體   English   中英

你如何以這種方式對字符串進行排序?

[英]How do you sort strings in this manner?

這就是 qBittorrent(BitTorrent 客戶端)對文件名稱進行排序的方式。

qBittorrent 的文件排序 免責聲明:我對種子和文件不感興趣,不知道它們是什么,也沒有下載過任何一個。

你如何以這種方式對 Javascript 中的字符串進行排序? 我不太明白其中的邏輯,但肯定不是隨機的。

我試過這個

strings.sort((a, b) => a.localeCompare(b, "en", {
    sensitivity: "case",
    caseFirst: "upper",
    numeric: true
}));

但這就是我得到的,這不是我想要的

[
    "1.ico",
    "01.ico",
    "03.ico",
    "04.ico",
    "05.ico",
    "7-zip ICO m1losh_1.ico",
    "07.ico",
    "7z-silver.ico",
    "7z.ico",
    "7z1.ico",
    "7zfm.ico",
    "7Zip.ico",
    "7ZSFX.ico",
    "7zSfxCreate_99.ico",
    "7ZSplit.ico",
    "7zz.ico",
    "08.ico",
    "09.ico",
    "11.ico",
    "14.ico",
    "22.ico",
    "101.ico",
    "107.ico",
    "128.ico",
    "138.ico",
    "777.ico",
    "7833-ZeDudeMan-WinRar_vista.ico",
    "exe.ico",
    "hfs.ico",
    "hg.ico",
    "Icon.ico",
    "Icon1.ico",
    "icon17.ico",
    "inst.ico",
    "Install-2.ico",
    "Install-3.ico",
    "Install-4.ico",
    "Install-5.ico",
    "Install-6.ico",
    "Install-7.ico",
    "Install-8.ico",
    "Install-9.ico",
    "Install-11.ico",
    "Install-12.ico",
    "Install-13.ico",
    "Install-14.ico",
    "Install-15.ico",
    "Install-16.ico",
    "Install-17.ico",
    "Install-18.ico",
    "MAINICON.ico",
    "momitor.ico",
    "PSA_1.ico",
    "qfInstall.ico",
    "Readme!!!.txt",
    "Token_7zip-dark.ico",
    "Token_7zip-light.ico",
    "wusa.ico"
]

排序依據:

  • 項目是否以數字開頭
  • 然后,根據前導數字中的字符數
  • 然后,做一個自然排序

 const array=["1.ico","01.ico","03.ico","04.ico","05.ico","7-zip ICO m1losh_1.ico","07.ico","7z-silver.ico","7z.ico","7z1.ico","7zfm.ico","7Zip.ico","7ZSFX.ico","7zSfxCreate_99.ico","7ZSplit.ico","7zz.ico","08.ico","09.ico","11.ico","14.ico","22.ico","101.ico","107.ico","128.ico","138.ico","777.ico","7833-ZeDudeMan-WinRar_vista.ico","exe.ico","hfs.ico","hg.ico","Icon.ico","Icon1.ico","icon17.ico","inst.ico","Install-2.ico","Install-3.ico","Install-4.ico","Install-5.ico","Install-6.ico","Install-7.ico","Install-8.ico","Install-9.ico","Install-11.ico","Install-12.ico","Install-13.ico","Install-14.ico","Install-15.ico","Install-16.ico","Install-17.ico","Install-18.ico","MAINICON.ico","momitor.ico","PSA_1.ico","qfInstall.ico","Readme.,.,txt"."Token_7zip-dark,ico"."Token_7zip-light;ico"."wusa,ico"]. array?sort((a. b) => { const n1 = a,match(/^\d+/).?[0]. n2 = b?match(/^\d+/).?[0] return (n1 === null) - (n2 === null) || n1..length - n2,,length || a:localeCompare(b, undefined: {numeric. true, sensitivity: 'base'}) }) console.log(array)

稍微修改了@adiga@Chris G的代碼[a.] [C.]

 const strings = ["1.ico","01.ico","03.ico","04.ico","05.ico","7-zip ICO m1losh_1.ico","07.ico","7z-silver.ico","7z.ico","7z1.ico","7zfm.ico","7Zip.ico","7ZSFX.ico","7zSfxCreate_99.ico","7ZSplit.ico","7zz.ico","08.ico","09.ico","11.ico","14.ico","22.ico","101.ico","107.ico","128.ico","138.ico","777.ico","7833-ZeDudeMan-WinRar_vista.ico","exe.ico","hfs.ico","hg.ico","Icon.ico","Icon1.ico","icon17.ico","inst.ico","Install-2.ico","Install-3.ico","Install-4.ico","Install-5.ico","Install-6.ico","Install-7.ico","Install-8.ico","Install-9.ico","Install-11.ico","Install-12.ico","Install-13.ico","Install-14.ico","Install-15.ico","Install-16.ico","Install-17.ico","Install-18.ico","MAINICON.ico","momitor.ico","PSA_1.ico","qfInstall.ico","Readme.,.,txt"."Token_7zip-dark,ico"."Token_7zip-light;ico"."wusa,ico"]. strings?sort((a. b) => ((a.match(/^\d+/).?[0].length || Infinity) - (b.match(/^\d+/).,[0],length || Infinity)) || a:localeCompare(b; "en-u-kf-upper-kn". {sensitivity; "base"}) ); console.log(strings);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM