Допустим, у меня есть несколько предметов, у каждого предмета есть последовательность - меньшие последовательности означают, что предметы выше. Элемент может иметь зависимость / зависимости от других элементов. Кроме того, у предмета могут быть надежные вещи - т.е. от него могут зависеть некоторые другие предметы. В приведенном ниже списке элементов (здесь я использовал связанный массив) перечислены элементы. Свойство dep каждого элемента содержит список зависимостей и зависимостей.
var dependencyDict = {
item1: {dependsOn: [], dependable: ['item3']},
item2: {dependsOn: [], dependable: []},
item3: {dependsOn: ['item1'], dependable: ['item4']},
item4: {dependsOn: ['item3'], dependable: []}
}
var itemList = {
item1: {
name: 'item1',
seq: 1,
dep: dependencyDict['item1']
},
item2: {
name: 'item2',
seq: 2,
dep: dependencyDict['item2']
},
item3: {
name: 'item3',
seq: 3,
dep: dependencyDict['item3']
},
item4: {
name: 'item4',
seq: 4,
dep: dependencyDict['item4']
}
}
В соответствии с вышеизложенным элементы расположены в порядке ихпоследовательность такова:
item1
item2
item3
item4
Моя цель - переупорядочить элементы, т.е. изменить последовательность (если возможно), чтобы зависимости не были повреждены.
Проверка: элемент может перемещаться, только если зависимости остаются нетронутыми: т.е.
элемент может зависеть только от элементов, которые находятся над ним, т. е. их последовательность меньше последовательности элемента и наоборот, т. е.
anЭлемент может иметь элементы в качестве зависимых, только если элементы находятся ниже элемента, то есть их последовательности превышают последовательность элементов
Например, если я скажу переместить (item3, 2) - я спрашиваючтобы переместить элемент 3 в положение 2, чтобы новый список элементов был таким:
{
item1: {
name: 'item1',
seq: 1,
dep: dependencyDict['item1']
},
item2: {
name: 'item2',
seq: 3,
dep: dependencyDict['item2']
},
item3: {
name: 'item3',
seq: 2,
dep: dependencyDict['item3']
},
item4: {
name: 'item4',
seq: 4,
dep: dependencyDict['item4']
}
обратите внимание на изменение последовательностей
Но если я скажу переместить (item3, 1), это не так,потому что item3 зависит от item1 - если яt перемещается в позицию 1, item1 перейдет в позицию 2, что делает недействительным правило, согласно которому элемент может зависеть только от элементов, находящихся над ним.
Мой код находится в рабочем состоянии, но я использовал больше if-elsesчем правильный алгоритм
Гибкость: элемент списка может быть помещен в любую структуру данных и может использоваться любой алгоритм