按楼层名称排序
昨天接到一个需求,如下: 一个乱序的楼层数组
[
'7D', '7A', '15A', '19B', '9D', '8B',
'16A', '21B', '11D', '15C', '10B', '12A',
'15B', '14C', '16D', '10A', '7C', '16C',
'16B', '17C', '8D', '19A', '17B', '11B',
'21A', '14D', '21C', '14B', '20C', '11A',
'20D', '20A', '12D', '18B', '14A', '9A',
'20B', '8C', '10C', '18D', '7B', '8A',
'19D', '11C', '19C', '18C', '9C', '10D',
'18A', '12B', '15D', '17A', '17D', '12C',
'9B'
]
排序后的结果要求是:
[
'7A', '7B', '7C', '7D', '8A', '8B',
'8C', '8D', '9A', '9B', '9C', '9D',
'10A', '10B', '10C', '10D', '11A', '11B',
'11C', '11D', '12A', '12B', '12C', '12D',
'14A', '14B', '14C', '14D', '15A', '15B',
'15C', '15D', '16A', '16B', '16C', '16D',
'17A', '17B', '17C', '17D', '18A', '18B',
'18C', '18D', '19A', '19B', '19C', '19D',
'20A', '20B', '20C', '20D', '21A', '21B',
'21C'
]
我的的实现,借助 loadsh
的 sortBy
函数,先按数字排,然后再按字母排。
完整代码如下:
const _ = require('loadsh');
let zoneNames = [
'15B', '7C', '11D', '14D', '18B', '14A',
'12C', '8C', '16B', '16C', '17B', '17D',
'14C', '21C', '20D', '10C', '17A', '9A',
'10B', '21A', '19C', '12D', '9D', '15A',
'11A', '18A', '14B', '20B', '10A', '18D',
'7A', '15C', '9B', '11B', '19A', '16A',
'11C', '16D', '19D', '7B', '20C', '21B',
'10D', '18C', '12A', '19B', '8B', '20A',
'8D', '17C', '15D', '8A', '7D', '9C',
'12B'
]
zoneNames = _.shuffle(zoneNames);
console.log('before sort:', zoneNames);
const sortedZoneNames = _.sortBy(zoneNames,
function (floor) {
const name = floor || '';
return parseInt(name, 10);
},
function (floor) {
let name = floor || '';
name = name.replace(/[0-9]/g, '');
return name;
},
);
console.log('after sort:', sortedZoneNames);
以上,纯属记录一下。88。