示例輸入:排序範圍數組['55-66','> 55','<66']?
[ '50-59', '60-69', '40-49', '>=70', '<40' ]
預期輸出
[ '<40', '40-49', '50-59', '60-69', '>=70' ]
嘗試;擴大從我以前的單行(調試):
export function sort_ranges(ranges: string[]): string[] {
const collator = new Intl.Collator(undefined, {
numeric: true,
sensitivity: 'base',
ignorePunctuation: true
});
return ranges.sort((a: string, b: string): number => {
const bNaN: boolean = !isNaN(parseInt(b[0]));
const col =() =>
console.info(`collator(${a}, ${b}) = ${collator.compare(a, b)}`
) || collator.compare(a, b);
if (a[0] === '<' && bNaN) {
console.info('< =', a);
return -1;
}
else if (a[0] === '>' || b[0] === '>') {
console.info('> =', a);
return 1;
}
else return col();
}
);
}
Runnable (mocha+chai in a plnkr)
注:範圍被保證是不重疊的,並且可能有其他的東西等「富」,其應該在陣列中在數組末尾以任何順序放置。
想法:我可以建立一個像[[50,59], ['<', '40']]
這樣的新陣列,然後嘗試重寫.sort
方法,但這似乎很瘋狂。有更好的解決方案嗎?
我不知道爲什麼是'60-69'和''50-59'之前40-49'於預期的結果。 –
哎呀,我的不好;複製它急於 –
51-57會去哪裏? – mplungjan