字符数字混合排序

这篇文章(559a4842e736a6e544c0bd67)是从 Teambition 迁移过来的

字符数字混合情况下,如何获得按数字正确排序?

这里以 angularjs 的自定义排序作为例子,我使用了正则表达式把所有数字的区段找到,然后前面填充0

js:

/**
 * 设备列表 自定义排序
 *
 * 通过对数字补‘0’来获得正确的排序
 * L12-3 -> L0012-0003 
 * 这里预估序号最大不会超过 9999,所有采用4位填充。
 */
 
$scope.orderByDeviceNo = function(_device) {
    var _deviceNo = _device.deviceno;
    _deviceNo = _deviceNo && _deviceNo.replace(/(\d+)/g, function($1) {
        return paddingZero($1, 4);
    });
    return _deviceNo;
};

function paddingZero(num, n) {
    return (Array(n).join(0) + num).slice(-n);
}

html:

<li ng-repeat="device in deviceList | orderBy:orderByDeviceNo" >