简而言之,我希望能够基于提供的指令(仅在给定时间)输出排序后的数组。我正在寻找一个与下面的示例大致相同的Javascript实现。
简而言之,我希望能够基于提供的指令输出排序后的数组,而不是基于指令的输出。以下面的Javascript为例:
const list = new SortedListMechanism() // our object for processing instructions
list.insert({item: 'one'})
list.insert({item: 'four', after: 'one'})
list.insert({item: 'three', before: 'four', after:'two'})
list.insert({item:'two', after: 'one'})
list.compile()
// returns ['one', 'two', 'three', 'four']
现在,我知道这是一个排序问题,但是我不太确定哪种排序问题,或者甚至是我要寻找的东西。我确定存在支持此功能的NPM软件包,但老实说,我不知道要寻找什么。
作为背景,这是受Ruby on Rails中使用的ActiveSupport :: Callback机制的启发。
答案 0 :(得分:2)
AuxTaco的想法正确!这是一种拓扑!
由于我不在乎实现拓扑排序,因此我只使用NPM中的一种,特别是@ hapi / topo。
这是我的用法:
const Topo = require('@hapi/topo');
let list = new Topo()
let counter= 0
list.add('one', {group:'one'}) //this package requires adding the group name so we make it the same
list.add('four', {group: 'four', after: 'one', sort: counter++})
list.add('three', {group:'three', before: 'four', after:'two', sort: counter++})
list.add('two', {group: 'two', after: 'one', sort: counter++})
list.nodes
//returns ['one', 'two', 'three', 'four']
//example from Asthmatic's comment
list = new Topo()
counter = 0
list.add('one', {group:'one', sort: counter++}) //this package requires adding the group name so we make it the same
list.add('four', {group: 'four', after: 'one', sort: counter++})
list.add('two', {group: 'two', after: 'one', sort: counter++})
list.nodes
// returns ['one', 'four', 'two']
这似乎解决了问题。谢谢!