根据Javascript中的说明对列表进行排序

时间:2019-08-16 21:35:04

标签: javascript sorting computer-science

简而言之,我希望能够基于提供的指令(仅在给定时间)输出排序后的数组。我正在寻找一个与下面的示例大致相同的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机制的启发。

1 个答案:

答案 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']

这似乎解决了问题。谢谢!