专栏首页前端侠2.0underscore.js的排序扩展。 倒序和多列排序

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');
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • css3的transform造成z-index无效, 附我的牛逼解法

    我想锁表头及锁定列。昨天新找的方法是用css3的transform,这个应该在IE9以上都可以的。

    申君健
  • 通过CSS,实现元素反转 原

          今天突然看到ES6还有Reflect 概念,我怎么以前没注意过,赶快去CANIUSE上查一下吧,却意外看到CSS Reflections,竟然可以有...

    申君健
  • table锁定列的一个方法.及琢磨思路

    这是从http://stackoverflow.com找到一个一链接,删除多余的css,加上色就是上图。

    申君健
  • SpringMvc配置文件上传

    使用的是JavaConfig,在SpittrWebAppInitializer文件中,继承了AbstractAnnotationConfigDispatcher...

    凡人飞
  • Docker 清理命令 prune

    Docker 1.13.0+ 引入了清理命令。 官方文档:https://docs.docker.com/engine/admin/pruning/ 清理镜像 ...

    康怀帅
  • 数据库一个字段保存多标志位

    十毛
  • ToB干货 :来自一线投资机构合伙人的深度分享 | 腾讯SaaS加速器·课堂

    ? 来源:腾讯SaaS加速器二期开营暨首次封培 ---- 12月5日,腾讯SaaS加速器二期全球40强齐聚深圳大鹏湾,庆祝顺利开营。这些头部企业1500多项目...

    腾讯SaaS加速器
  • 腾讯云加码 IDaaS,加速 SaaS 时代进程|腾讯SaaS加速器·案例库

    ? 来源 : CSDN(ID:CSDNnews) 记者 | 邓晓娟 ---- 6月5日,腾讯云宣布与玉符科技达成战略合作,合作共建“千帆计划”的IDaaS平...

    腾讯SaaS加速器
  • 【微服务】144:跨域问题及其解决方法

    其实第③种方式直接使用网关域名访问也是可以的,在前天使用nginx时配置了网关域名。

    刘小爱
  • SpringBoot+Shiro+Redis共享Session入门小栗子

    在单机版的Springboot+Shiro的基础上,这次实现共享Session。

    Java团长

扫码关注云+社区

领取腾讯云代金券