我想根据“之前”和“之后”条件对数组进行排序。
示例:
- C
should be before B
:示例:{key: 'C', condition: {$before: 'B'}
- B
should be after A
:示例:{key: 'B', condition: {$after: 'A'}
- 答:示例
{key: 'A'}
.
排序后的列表将是:A, C, B
.
我需要这个,以便我可以对管道中的中间件列表进行排序。每个中间件都有一个条件,我应该提出一个满足所有中间件的所有条件的顺序。这类似于 MS Project
考虑到任务的要求,可以在甘特图中组织任务。
问题:实现这一目标的最简单方法是什么?即使使用像 underscore
这样的外部库?额外奖励:这种排序有比“条件排序”更好的名字吗?这会对我的 Google 搜索有所帮助。
编辑:输入应该是一个包含其条件的项目数组。我无法对排序方法进行硬编码。
编辑2:正如@Berdi所述。这称为类型排序。是的,根据项目和条件,可能没有满足所有条件的组合,我的算法应该会触发异常。
编辑3:我考虑实现这一点的方式是计算所有可能的组合,然后查找第一个满足所有条件的组合。这对我来说可能不会太慢,因为就我而言,我可以在应用程序启动时执行一次此操作,并且数组中的项目不会超过 50 个。但无论如何,对于科学来说,了解更优化的解决方案是件好事。
编辑 4:我会接受仅适用于之后条件的解决方案。喜欢MS Project
.
最佳答案
Bonus: Does this kind of sorting have a name better than "conditional sorting"?
它的名字是 topological sort 。根据您的具体输入格式和内容,它甚至可能没有明确定义。
关于javascript - 如何在 JavaScript 中根据 "before"和 "after"条件对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34118268/