• 条件排序


    var items = [
        {name: "linc", age: 28, num: 12345},
        {name: "linc", age: 28, num: 1234},
        {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}
    ];
    
    
    // ascending 升序  descending 降序
    (function _default() {
        items.sort(function (a, b) {
            return SortByProps(a, b, ['name', 'age', 'num'], {name: 'ascending', age: 'descending'});
        });
        console.log(items)
    })();
    
    function SortByProps(item1, item2, attr, obj) {
        /**
         * @type {Array}
         * attr: Array 按照数组的顺序排序
         * obj: { attr[index]: 'ascending'/ 'descending' } ascending '升序' descending '降序'
         */
        var props = [];
        if (obj) {
            props.push(obj)
        }
        var cps = []; // 存储排序属性比较结果。
        // 如果未指定排序属性(即obj不存在),则按照全属性升序排序。
        // 记录下两个排序项按照各个排序属性进行比较得到的结果
        var asc = true; // 记录升序还是降序,升序 true  降序 false
        if (props.length < 1) {
            for (var p of attr) {
                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 of attr) {
                    prop[o] ? asc = (prop[o] === "ascending") : asc = true;
                    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; // 小于时跳出循环。
                    }
                }
            }
        }
        return cps[cps.length - 1]
    }
    
    
  • 相关阅读:
    定时器实现点击重新发送信息倒计时显示
    新浪微博5s钟后跳转页面
    时钟制作代码
    判断线段相交
    POJ1265:Area(多边形面积公式+pick公式) 好题
    ACM零散知识
    POJ2318:TOYS(叉积判断点和线段的关系+二分)&&POJ2398Toy Storage
    计算几何初步认识
    UVA10026:Shoemaker's Problem(贪心)
    UVA10020:Minimal coverage(最小区间覆盖)
  • 原文地址:https://www.cnblogs.com/Juphy/p/9101682.html
Copyright © 2020-2023  润新知