首页 > 解决方案 > 如何使用 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}
]

标签: javascriptfunctional-programminglodash

解决方案


您可以使用_.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>


推荐阅读