Примечание : более ранние версии этого были отброшены после комментариев здесь и в вопросе разъяснили требования.
После проработки вопроса и обновлений к нему, этоПохоже, это будет делать то, что запрашивается.Данные вырезаны из изображения - пожалуйста, оставляйте текст, а не изображения!- и может не совсем соответствовать тому, что происходит.При этом используется то, что для меня является функцией с тем же поведением, что и в оригинале, но несколько упрощенной.
Но главное - обернуть ваш sortFn
так, чтобы он работал с элементами со свойством sort вSiteID
поле, вы можете просто написать новый компаратор, как это:
(a, b) => sortFn(a.SiteID, b.SiteID)
... и передать его в table.sort()
.
const regex = /^([a-z]*)(\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))