js 排序

131 阅读1分钟

待更新。。。

1. A-1, A-100, A-2 此类数据,排序问题

如果按照默认的排序规则,A-100 会被排在 A-2A-3 前面,这与我们预想的 A-100 会在最后面的预想结果不一样

var arr = ["A-100", "A-2", "A-1", "A-3"];

arr.sort();
//["A-1", "A-100", "A-2", "A-3"]

最蠢的方法,参数前面补零

var arr = ["A-100", "A-2", "A-1", "A-3"];

function strNumSort(arr, len = 6) {
    let [...arrSort] = arr;
    return arrSort.sort((a, b) => {
        a = addZero(a);
        b = addZero(b);
        return ((a < b) ? -1 : ((a > b) ? 1 : 0));

        // 数字前补零操作,凑足6位数字
        function addZero(str) {
            return (str.match(/(\d+|\D+)/g) || []).map((cv) => {
                if(/\d+/g.test(cv)) {
	           zeroLen = (len - cv.length) > 0 ? (len - cv.length) : 0;
	           return Array(zeroLen).join("0") + cv;
	        } else {
	           return cv;
	        }
            }).join("");
        }
    });
}

strNumSort(arr);
//  [ 'A-1', 'A-2', 'A-3', 'A-100' ]