javascript - 如何使用 lodash 在 javascript 中实现多级排序?
问题描述
问题:带有过滤系统的工作板,用户可以在其中设置标签首选项。
我需要根据匹配的标签数量对作业列表进行排序,多个作业可以具有相同的标签计数,然后我必须对每个标签计数组中的最新作业进行排序。
我现在的方法:我根据标签匹配计数对作业进行分组。我忽略了那些计数为零的。我继续按日期降序对每个组进行排序。最后按照标签计数的降序合并集合。
使用函数式编程(如reduce、map、filter)在lodash或纯javascript中执行此操作是否更好。日期A < 日期B < 日期C 等等...
Input:
[
{ tagCount: 2, date: DateA},
{ tagCount: 2, date: DateB},
{ tagCount: 1, date: DateC},
{ tagCount: 3, date: DateD},
]
Output:
[
{ tagCount: 3, date: DateD},
{ tagCount: 2, date: DateB},
{ tagCount: 2, date: DateA},
{ tagCount: 1, date: DateC}
]
解决方案
您可以使用_.orderBy()
和 state['tagCount', 'date']
作为排序属性,以及['desc', 'desc']
它们各自的排序顺序:
作为desc
排序顺序:
const input = [{ tagCount: 2, date: 'DateA'}, { tagCount: 2, date: 'DateB'}, { tagCount: 1, date: 'DateC'}, { tagCount: 3, date: 'DateD'}]
const result = _.orderBy(input, ['tagCount', 'date'], ['desc', 'desc'])
console.log(result)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.20/lodash.min.js" integrity="sha512-90vH1Z83AJY9DmlWa8WkjkV79yfS2n2Oxhsi2dZbIv0nC4E6m5AbH8Nh156kkM7JePmqD6tcZsfad1ueoaovww==" crossorigin="anonymous"></script>
推荐阅读
- angular - 如何使用 SelectionModel 以编程方式选择材质树节点?
- php - PHP/Laravel 5.4/Carbon - 解析一年中一周的可持续方式,考虑到每年的周数差异
- java - microsoft sql server 和 maven 的休眠问题
- c# - 将存档文件中的 Stream 转换为 Byte[]
- python - 从 selenium 中,如何通过 id 查找值?
- android - 我必须安装 Android SDK 才能开发 Android 应用程序吗?
- node.js - 使用贝宝安全付款
- java - Java 命名文件
- xml - 为路径组合变量
- ios - 有没有办法在 Windows 上构建 IOS 应用程序?