簡體   English   中英

在多列數組上對字母數字進行排序

[英]Sort Alphanumeric on Array of more than one column

在一個數組上完成此功能時,效果很好:

 var stringArray = ['48AB1','48AB10','48AB101','48AB106','48AB108','48AB11','48AB111','48AB1117','48AB1138','48AB18','48AB2']; var regex = /^([az]*)(\\d*)/i; function sortFn(a, b) { var _a = a.match(regex); var _b = b.match(regex); // if the alphabetic part of a is less than that of b => -1 if (_a[1] < _b[1]) return -1; // if the alphabetic part of a is greater than that of b => 1 if (_a[1] > _b[1]) return 1; // if the alphabetic parts are equal, check the number parts var _n = parseInt(_a[2]) - parseInt(_b[2]); if(_n == 0) // if the number parts are equal start a recursive test on the rest return sortFn(a.substr(_a[0].length), b.substr(_b[0].length)); // else, just sort using the numbers parts return _n; } console.log(stringArray.sort(sortFn)) 

我有多個列的數組,但是我只想在第一列上對數組進行排序。 我如何修改此代碼以僅將一列推入排序功能? 我從SQL服務中提取數據,並使用它來填充JQuery表。 默認情況下,數據以自然順序排序(即48AB1、48AB10、48AB100等)

我是編程的新手,因此將不勝感激。 謝謝!

編輯:這是有關我如何創建所有內容的更多信息

 var attrs = [] const activate = () => { WyoArch.serverApi("QuerySites").then(sites => { // jqxGrid creation // --> reusable options to stylize grid let mixinGridOptions = mixin => new Object({}, columns: mixin.columns, source: createJqxDataAdapter(mixin.source || []) }) attrs = sites; console.log(attrs) // --> sites pickers.site.jqxGrid = $("#curateExisting-sitePicker .picker-jqxGrid").jqxGrid(mixinGridOptions({ source: sites, columns: [{ text: 'ID', datafield: 'SiteID', width: 100 }, { text: 'Name', datafield: 'SiteName', width: 150 }, { text: 'Landowner', datafield: 'LandOwner', width: 100 }, { text: 'TWN', datafield: 'TWN', width: 80 }, { text: 'RNG', datafield: 'RNG', width: 80 }, { text: 'Section', datafield: 'Section', width: 80 }, ], })) } } 

陣列的控制台日志的屏幕快照

注意 :這里的舊版本已在此處的注釋和問題中闡明了要求之后被丟棄。


處理完問題並對其進行更新后,似乎可以完成請求的工作。 數據是從圖片中摘錄的-請張貼文字,而不是文字圖片! -可能與發生的情況不太匹配。 在我看來,這使用的功能與原始功能相同,但有所簡化。

但主要要點是,要包裝您的sortFn使其對SiteID字段中具有sort屬性的元素起作用,您可以編寫一個新的比較器,如下所示:

(a, b) => sortFn(a.SiteID, b.SiteID)

...並將其傳遞給table.sort()

 const regex = /^([az]*)(\\d*)/i; const sortFn = (a, b) => { if (a == '' && b == '') {return 0;} const [a0, a1, a2] = a.match(regex); const [b0, b1, b2] = b.match(regex); return a1 < b1 ? -1 : a1 > b1 ? 1 : a2 - b2 || sortFn(a.substr(a0.length), b.substr(b0.length)) } const sortBySiteId = (a, b) => sortFn(a.SiteID, b.SiteID) var table = [ {SiteID: '1ABCTest', SiteName: 'App Testing RK', ContactID: 250}, {SiteID: '1ABCTest', SiteName: 'App Testing', ContactID: 250}, {SiteID: '1Albany', SiteName: 'RK Test', ContactID: 56}, {SiteID: '1BCDTest', SiteName: 'RK Test 2', ContactID: 201}, {SiteID: '1OFF', SiteName: 'One OFF', ContactID: 161}, {SiteID: '24BH406', SiteName: 'KOBOLD RANCH', ContactID: 250}, {SiteID: '42IN124', SiteName: null, ContactID: null}, {SiteID: '42IN40', SiteName: null, ContactID: null}, {SiteID: '42SV5', SiteName: null, ContactID: null}, {SiteID: '42UN95', SiteName: null, ContactID: null}, {SiteID: '48AB1', SiteName: 'CHINA WALL', ContactID: null}, {SiteID: '48AB10', SiteName: 'EL PRIMERO', ContactID: null}, ]; console.log(table.sort(sortBySiteId)) 

暫無
暫無

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

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