Skip to content

Instantly share code, notes, and snippets.

@allenhwkim
Created March 19, 2019 23:48
Show Gist options
  • Select an option

  • Save allenhwkim/992479f4a8abd1c182e5cb295d280a31 to your computer and use it in GitHub Desktop.

Select an option

Save allenhwkim/992479f4a8abd1c182e5cb295d280a31 to your computer and use it in GitHub Desktop.
sorting servivces
const getSortKey = function(el) {
const pad = function(str, len) {
return ('' + str + ' ').slice(0, len);
};
const addr = [pad(el.streetName || '', 5), pad(el.streetNumber || '', 5), pad(el.unit || '', 5)].join('');
const name = [pad((el.firstName||'').toLowerCase(), 5), pad((el.lastName||'').toLowerCase(), 5)].join('');
if (el.product === 'wireless') {
return [pad('', 15), name, el.ctn, '0-wls'].join('');
} else if (el.product === 'internet') {
return [addr, pad('', 20), '1-hsi'].join('');
} else if (el.product === 'tv') {
return [addr, pad('', 20), '2-tv '].join('');
} else if (el.product === 'rhp') {
return [addr, pad('', 10), el.ctn, '3-rhp'].join('');
} else {
return [addr, pad('', 10), el.ctn||'', '4-product'].join('');
}
};
function sortFn(a, b) {
const sortKeyA = getSortKey(a);
const sortKeyB = getSortKey(b);
return sortKeyA < sortKeyB ? -1 : sortKeyA > sortKeyB ? 1 : 0;
}
const services = [
{product: 'wireless', firstName: 'array', lastName: 'sort', ctn: '6471234567'},
{product: 'internet', streetName: 'dixie', streetNumber: '10' },
{product: 'tv', streetName: 'dixie', streetNumber: '10'},
{product: 'internet', streetName: 'dixie', streetNumber: '13', unit: '456'},
{product: 'rhp', streetName: 'dixie', streetNumber: '10', ctn: '1234567890'},
{product: 'wireless', firstName: 'John', lastName: 'Doe', ctn: '1234567890'},
{product: 'rhp', streetName: 'dixie', streetNumber: '10', ctn: '4164567890'},
{product: 'wireless', firstName: 'Foo', lastName: 'Bar', ctn: '4161234567'},
{product: 'tv', streetName: 'dixie', streetNumber: '10', unit: '123'},
{product: 'internet', streetName: 'dixie', streetNumber: '13', unit: '123'},
{product: 'rhp', streetName: 'dixie', streetNumber: '10', ctn: '9054567890'},
{product: 'wireless', firstName: 'Hello', lastName: 'World', ctn: '9053829283'},
];
services.sort(sortFn).forEach(el => console.log(getSortKey(el), JSON.stringify(el)));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment