Снижение транзитивности в Javascript - PullRequest
0 голосов
/ 19 сентября 2018

Я работаю над определением транзитивности для данных маршрутов на основе следующего ввода

[
    {
        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'
      }
]

1 Ответ

0 голосов
/ 19 сентября 2018

Вы можете взять объект для заданных маршрутов и использовать функцию для проверки наличия отдельного маршрута.

const
    check = (from, to) => routes[from] 
        ? routes[from].some(t => t === to || check(t, to))
        : false;

var routes = { HK: ['SG'], SG: ['OAK'], OAK:['LA'] };

console.log([
    ['HK', 'OAK'], // true
    ['HK', 'LA'],  // true
    ['SG', 'LA'],  // true
    ['LA', 'OAK']  // false
].map(a => check(...a)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...