JavaScript实现拼音+数字混合排序的方法

2014-07-28 00:00:00 by 【6yang】, 755 visits, 收藏 | 返回
本节主要说明String.prototype.localeCompare


var a = ["b1", "b21b", "b231c", "b21a"]; //  ["b1", "b21a", "b21b", "b231c"]
var CompareStrings = {
    db: '',
    getOrderedUnicode: function(char) {
        var originalUnicode = char.charCodeAt();
        if (originalUnicode >= 0x4E00 && originalUnicode <= 0x9FA5) {
            var index = this.db.indexOf(char);
            if (index > -1) {
                return index + 0x4E00;
            }
        }
        return originalUnicode;
    },
    compare: function(a, b) {
        if (a == b) {
            return 0;
        }
        if (b.length == 0) {
            return - 1;
        }
        var count = a.length > b.length ? b.length: a.length;
        for (var i = 0; i < count; i++) {
            var au = this.getOrderedUnicode(a[i]);
            var bu = this.getOrderedUnicode(b[i]);
            if (au > bu) {
                return 1;
            } else if (au < bu) {
                return - 1;
            }
        }
        return a.length > b.length ? 1: -1;
    }
}
String.prototype.localeCompare = function(param) {
    return CompareStrings.compare(this.toString(), param);
}
a.sort(function(a, b) {
    return a.localeCompare(b);
});
a
分享到:
share

    图片原图

    loading

    loading