underscore.js的排序扩展。 倒序和多列排序

   // Sort the object's values by a criterion produced by an iterator.
    _.sortBy = function (obj, iterator, context) {
        iterator = lookupIterator(iterator, context);
        return _.pluck(_.map(obj, function (value, index, list) {
            return {
                value: value,
                index: index,
                criteria: iterator(value, index, list)
            };
        }).sort(function (left, right) {
            var a = left.criteria;
            var b = right.criteria;
            if (a !== b) {
                if (a > b || a === void 0) return 1;
                if (a < b || b === void 0) return -1;
            }
            return left.index - right.index;
        }), 'value');
    };
    // Sort the object's values by a criterion produced by an iterator.
    _.sortByDesc = function (obj, iterator, context) {
        iterator = lookupIterator(iterator, context);
        return _.pluck(_.map(obj, function (value, index, list) {
            return {
                value: value,
                index: index,
                criteria: iterator(value, index, list)
            };
        }).sort(function (left, right) {
            var a = left.criteria;
            var b = right.criteria;
            if (a !== b) {
                if (a > b || a === void 0) return -1;
                if (a < b || b === void 0) return 1;
            }
            return left.index - right.index;
        }), 'value');
    };
  
  _.multisortBy = function (obj, iterator, context) {
        return _.pluck(
            _.map(obj, function (value, index, list) {
                return {
                    value: value,
                    criteria: iterator.call(context, value, index, list)
                }
            }).sort(function (left, right) {
            var a = left.criteria, b = right.criteria;
            if (!$.isArray(a)) {
                return a < b ? -1 : a > b ? 1 : 0;
            } else {
                var result = 0;
                for (var i = 0 ; i < a.length ; i++) {
                    var r = a[i] < b[i] ? -1 : a[i] > b[i] ? 1 : 0;
                    if (r != 0 || i == a.length - 1)
                        return r;
                }
            }
        }), 'value');
    }


转载于:https://my.oschina.net/u/1540190/blog/285845

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值