资讯专栏INFORMATION COLUMN

5分钟学会javascript多条件排序的函数式实现

Donald / 453人阅读

摘要:一些筛选排序的场景,会遇到多个条件组合对数据进行排序的需求在中,应如何实现并且能够满足灵活配置呢首先中数组的函数可对数据进行排序处理函数说明所需要的参数为一个返回值为类型的函数,通过调用此函数的结果与进行比较,得到小于等于大于的结果,进行排

一些筛选、排序的场景,会遇到多个条件组合对数据进行排序的需求

在javascript中,应如何实现?并且能够满足灵活配置呢?

首先javascript中数组的sort函数可对数据进行排序处理 sort函数说明

   sort所需要的参数为一个返回值为number类型的函数,通过调用此函数的结果与0进行比较,得到小于0、等于0、大于0的结果,进行排序

假设需要进行多个条件的排序,那么可产生一个条件数组 [条件1, 条件2, 条件3]

   通过对此数组中元素的调整,即可灵活配置多个条件,并控制其判断的先后顺序
   sort的参数为一个函数,需要对数组进行转化

单个条件判断函数,对一些特殊的判断逻辑,小于0、等于0、大于0的判断方式并不通用

   如性别的判断,男or女
   条件判断函数的参数实际为相邻的两个待排序的元素
   通过对 (a, b) => boolean函数的包装,即可实现小于0、等于0、大于0的结果
   只需要在调用时,调整a、b参数的顺序即可

function getSort(fn) {
    return function(a, b) {
        var ret = 0;

        if (fn.call(this, a, b)) {
            ret = -1;
        } else if (fn.call(this, b, a)) {
            ret = 1;
        }

        return ret;
    }
}

function getMutipSort(arr) {
    return function(a, b) {
        var tmp, i = 0;

        do {
            tmp = arr[i++](a, b);
        } while (tmp == 0 && i < arr.length);

        return tmp;
    }
}

var ageSort = getSort(function(a, b) {
    return a.age < b.age;
});

var nameSort = getSort(function(a, b) {
    return a.name < b.name;
});

var sexSort = getSort(function(a, b) {
    return a.sex && !b.sex;
});

//判断条件先后顺序可调整
var arr = [nameSort, ageSort, sexSort];

var ret = data.sort(getMutipSort(arr));

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/104145.html

相关文章

  • 【30分钟学会】用js玩点算法(1):排序基础

    摘要:如果今天这个比例降低了,可能的原因之一是如今的排序算法更加高效,而并非排序的重要性降低了。约定都是从小到大排序,当前项为。冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交换它们。 前言 前端工程师由于业务特点比较少接触算法的东西,所以本系列也不会讲太过深入的东西,更多的是作为知识扩展和思维逻辑的培养。 排序就是将一组对象按照某种逻辑顺序重新排列的过程,本篇将介绍几种金典的排序...

    Richard_Gao 评论0 收藏0
  • 分钟教你学会配置eslint,还在为风格单双引号,对象末位逗号要不要,引用各种报错而烦恼?(建议收

    摘要:最全的配置大全,我已经加了详细中文注释,只需要找到自己想要的配置就可以了,强烈建议收藏用法非常简单,找到下的添加对象即可比如我要把规则原本单引号要变为双引号,那加上注意这个规则如果违反了规则情况下,这里的数字表示不不处理,表示警告,表示错误 最全的eslint配置大全,我已经加了详细中文注释,只需要找到自己想要的配置就可以了,强烈建议收藏! 用法非常简单,找到.eslintrc.js下...

    刘东 评论0 收藏0
  • 学会使用函数编程程序员(第1部分)

    摘要:函数式编程的目标是尽量写更多的纯函数,并将其与程序的其他部分隔离开来。在函数式编程中,是非法的。函数式编程使用参数保存状态,最好的例子就是递归。函数式编程使用递归进行循环。在函数式编程中,函数是一级公民。 showImg(https://segmentfault.com/img/bVblxCO?w=1600&h=710); 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质文章等...

    Steven 评论0 收藏0
  • 26天学通前端开发(配资料)

    摘要:网上有很多前端的学习路径文章,大多是知识点罗列为主或是资料的汇总,数据量让新人望而却步。天了解一个前端框架。也可以关注微信公众号晓舟报告,发送获取资料,就能收到下载密码,网盘地址在最下方,获取教程和案例的资料。 前言 好的学习方法可以事半功倍,好的学习路径可以指明前进方向。这篇文章不仅要写学习路径,还要写学习方法,还要发资料,干货满满,准备接招。 网上有很多前端的学习路径文章,大多是知...

    blair 评论0 收藏0
  • 18年求职面经及总结

    摘要:年求职面经及总结我的求职之路差不多走到尽头了感觉真是精疲力尽了把这大半年的经历和面试总结写下来希望能给和我一样在求职路上煎熬的人一点帮助先说背景微电子科学与工程专业学过两门和相关的课程语言和单片机这个专业的唯一好处就是大部分人并不知道这个专 18年求职面经及总结 我的求职之路差不多走到尽头了,感觉真是精疲力尽了.把这大半年的经历和面试总结写下来,希望能给和我一样在求职路上煎熬的人一点帮...

    zhangwang 评论0 收藏0

发表评论

0条评论

Donald

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<