Я работаю над определением транзитивности для данных маршрутов на основе следующего ввода
[
{
id: 1,
vessel: 'Vessel 1',
routeId: 1,
port: 'HK',
eta: null,
etd: '2016-01-03 00:00:00'
},
{
id: 2,
vessel: 'Vessel 1',
routeId: 1,
port: 'SG',
eta: '2016-01-06 00:00:00',
etd: '2016-01-09 00:00:00'
},
{
id: 3,
vessel: 'Vessel 3',
routeId: 2,
port: 'SG',
eta: '2016-01-12 00:00:00',
etd: '2016-01-14 00:00:00'
},
{
id: 4,
vessel: 'Vessel 3',
routeId: 2,
port: 'OAK',
eta: '2016-01-18 00:00:00',
etd: null
},
{
id: 5,
vessel: 'Vessel 4',
routeId: 3,
port: 'OAK',
eta: '2016-01-21 00:00:00',
etd: '2016-01-23 00:00:00'
},
{
id: 6,
vessel: 'Vessel 4',
routeId: 3,
port: 'LAX',
eta: '2016-01-28 00:00:00',
etd: null
}
];
Если вы посмотрите на отдельные маршруты на основе ключа routeID ,
routeID: 1, у нас есть
HK -> SG
routeID: 2, у нас есть
SG -> OAK
routeID: 3, у нас есть
OAK -> LA
Теперь транзитивность применяется для двух различных идентификаторов маршрута и основана навышеупомянутые пути, мы можем сказать, что есть действительная транзитивность для
HK -> OAK, HK -> LA, SG -> LA
Мой оригинальный подходпри работе над этой проблемой, сначала нужно было создать объект / набор места назначения для источника для отдельного маршрута, который выглядел бы так:
{
1:{
HK: [SG],
SG: []
},
2:{
SG: [US],
US: []
},
3:{
US: [USLA],
USLA: []
}
}
Затем я бы использовал вышеуказанный исходный ввод для прохождения каждого элемента и использованиясозданный набор определяет, существует ли транзитивность через другой идентификатор маршрута.Но я хотел бы помочь с этой проблемой, так как мой текущий мыслительный процесс, похоже, не дает желаемого результата.
РЕДАКТИРОВАТЬ
Ожидаемый результат будет
[
{
vessels: ['Vessel 1', 'Vessle 3'],
routeIds: [1, 2],
origin: 'HK',
destination: 'OAK',
etd: '2016-01-03 00:00:00',
eta: '2016-01-18 00:00:00'
},
{
vessels: ['Vessel 1', 'Vessel 3', 'Vessel 4'],
routeIds: [1, 2, 3],
origin: 'HK',
destination: 'LA',
etd: '2016-01-03 00:00:00',
eta: '2016-01-28 00:00:00'
},
{
vessels: ['Vessel 3', 'Vessel 4'],
routeIds: [2, 3],
origin: 'SG',
destination: 'LA',
etd: '2016-01-14 00:00:00',
eta: '2016-01-28 00:00:00'
}
]