按楼层名称排序

分类:JavaScript     发布时间:2020-11-17     最后更新:2020-11-20     浏览数:2559
实现按楼层排序,先按数字排,再按字母排。

按楼层名称排序

昨天接到一个需求,如下: 一个乱序的楼层数组

[
  '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'
]

我的的实现,借助 loadshsortBy 函数,先按数字排,然后再按字母排。 完整代码如下:

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。

上一篇: Android Gradle 插件版本和 Gradle 版本 下一篇: Angular websocket 事件装饰器