javascript - 如何在 JavaScript 中根据 "before"和 "after"条件对数组进行排序?

标签 javascript sorting

我想根据“之前”和“之后”条件对数组进行排序。

示例:

  • 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/

相关文章:

c - 多种类型的归并排序

sql - Oracle 中的字母数字排序

javascript - 仅当验证检查返回 true 时才通过 ajax 进行 POST

python - 如何在 Python 中存储 linux 调用的输出

javascript - 使用 AngularJS 对标题单击的表格进行排序,该表格同时包含数字和字符串作为列值

javascript - 迭代没有数组的嵌套 JSON 文件

sql - 独立对列进行排序,使得所有空值都位于每列的最后

javascript - Ember cli 自动生成的路由困惑

javascript - 轨道 3 : good rule of thumb for where to put javascript?

javascript - 通过 Jasmine 测试 JavaScript 文件