js 사용자 정의 다 중 필드 정렬

더 읽 기
  • 다 중 필드 동시 정렬 이 백 엔 드 에서 잘 이 루어 집 니 다. 직접 order by field 1 asc, field 2 asc, field 3 desc...
  • 다음 과 같이 현재 전단 을 여러 필드 에 따라 동시에 정렬 할 수 있 습 니 다.
  • //    
    var items = [
        {name:"linc",age:28,num:1234},
        {name:"linc",age:28,num:12345},
        {name:"kiki",age:20,num:12345},
        {name:"  ",age:26,num:123},
        {name:"  ",age:27,num:101},
        {name:"  ",age:26,num:111},
        {name:"  ",age:29,num:110},
        {name:"  ",age:30,num:110}
    ];
    
    //          
    (function asc-desc(){
        items.sort(function (a, b) {
            return SortByProps(a, b, { "name": "ascending", "age": "descending" });
        });
        console.log(items)
    })();
    //         ,        ,      
    (function desc(){
        items.sort(function (a, b) {
            return SortByProps(a, b, { "name": "descending", "age": "descending" });
        });
        console.log(items)
    })();
    //          ,       
    (function default(){
        items.sort(function (a, b) {
            return SortByProps(a, b);
        });
        console.log(items)
    })();
    
    //            ,           
    function SortByProps(item1, item2, obj) {
        var props = [];
        if(obj){
            props.push(obj)
        }
        var cps = []; //           。
        //          ( obj   ),          。
        //                              
        var asc = true;
        if (props.length < 1) {
            for (var p in item1) {
                if (item1[p] > item2[p]) {
                    cps.push(1);
                    break; //        。
                } else if (item1[p] === item2[p]) {
                    cps.push(0);
                } else {
                    cps.push(-1);
                    break; //        。
                }
            }
        } 
        else {
            for (var i = 0; i < props.length; i++) {
                var prop = props[i];
                for (var o in prop) {
                    asc = prop[o] === "ascending";
                    if (item1[o] > item2[o]) {
                        cps.push(asc ? 1 : -1);
                        break; //        。
                    } else if (item1[o] === item2[o]) {
                        cps.push(0);
                    } else {
                        cps.push(asc ? -1 : 1);
                        break; //        。
                    }
                }
            }
        }        
    
        //                              
        for (var j = 0; j < cps.length; j++) {
            if (cps[j] === 1 || cps[j] === -1) {
                return cps[j];
            }
        }
        return false;          
    }

    좋은 웹페이지 즐겨찾기