前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >underscore.js的排序扩展。 倒序和多列排序

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

作者头像
申君健
发布2018-09-21 15:46:02
3K0
发布2018-09-21 15:46:02
举报
文章被收录于专栏:前端侠2.0
代码语言:javascript
复制
   // 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');
    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2014/07/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档