首页 > js Array sort的问题

js Array sort的问题

        var array = ['四年级10','四年级1','四年级12','四年级15','四年级3','三年级10','三年级1','三年级12','三年级15','三年级3','三年级10','三年级10','一年级10', '二年级2', '一年级2', '二年级10'];

        array.sort(function(x, y){
            if(x.match(/\D/g).join("") > y.match(/\D/g).join("")){
                return 1;
            }else if(x.match(/\D/g).join("") < y.match(/\D/g).join("")){
                return -1
            }else {
                return 0;
            }
        });

        console.log(array);

        array.sort(function(x, y){

            if(x.match(/\D/g).join("") != y.match(/\D/g).join("")) return;

            return parseInt(x.match(/\d/g).join("")) - parseInt(y.match(/\d/g).join(""));

        });

        console.log(array);

这样的一个排序,目的很明显;但是第二次sort时,数组明显发生了变化,不是第一次sort的顺序了;
如果array的个数很少,四个的话,会有效果,但是数目已增加,就会乱了。为什么第二次sort时,会乱序;
哪位大牛给指点指点,或者还有更好的对这种array的排序方法?


if(x.match(/\D/g).join("") != y.match(/\D/g).join("")) return;
这个条件成立的时候, 没有返回值, 没有返回值, js 就不知道它的大小了, 所以位置就....


而且完全没必要进行两次sort一次就可以了.

    var array = ['四年级10', '四年级1', '四年级12', '四年级15', '四年级3', '三年级10', '三年级1', '三年级12', '三年级15', '三年级3', '三年级10', '三年级10', '一年级10', '二年级2', '一年级2', '二年级10'];

    var KEYS = {
        '一':1,
        '二':2,
        '三':3,
        '四':4
    };


    array.sort(function(x, y) {
        //得到班级名
        var c = x.match(/\D/).join(""),
            d = y.match(/\D/).join("");

        if(c === d){//班级名相同
            //得到具体的班
            var e = x.match(/\d+/).join(""),
                f = y.match(/\d+/).join("");

            return e - f;
        }

        return KEYS[c] > KEYS[d] ? 1 : -1;
    });

    console.log('二' > '三');

    console.log(JSON.stringify(array));

运行结果:

true
["一年级2","一年级10","二年级2","二年级10","三年级1","三年级3","三年级10","三年级10","三年级10","三年级12","三年级15","四年级1","四年级3","四年级10","四年级12","四年级15"]

因为在进行比较的时候, 汉字 '二' > '三', 所以 需要用另外的数据来做为辅助, 以便给它们正确的顺序, 否则 三年级 的数据 会排在 二年级 的前面.

另外你的代码中 在匹配数字的时候, 只匹配一位数字, 产生的问题是的 三年级3三年级10的后面, 因为代码里只比较了 31.

【热门文章】
【热门文章】