Используя lodash, я создал массив пар, каждый из которых представляет источник и назначение ссылки. Таким образом, для данного пути ссылок, у меня есть:Найти головку цепочки ссылок
[ [a, b], [a, c], [d, c] ]
Это данность, что первый элемент является первым звеном в цепи. Я изначально хотел отобразить пары в объект map/value map, а затем пройти через ключи и/или значения, чтобы найти голову.
упрощенный алгоритм:
keys.contains(a) || values.contains(a)
если либо возвращает TRUE (за исключением самой пары, естественно), то это не голова. Итак, начиная с первой пары, keys.contains (a) || values.contains (a) возвращает true, так что это не голова, а keys.contains (b) || values.contains (b) возвращает false - так что это должна быть голова.
Проблема: я не могу сопоставить пары в объекте, так как могут быть дубликаты клавиш/значений, которые переопределяют друг друга.
т.е. для приведенных выше примеров, результирующий объект будет:
{
a: c,
d: c
}
Я знаю, что могу перебрать их, но я не хотел бы сделать так много петель, если я не должен ...
Любые идеи более эффективного решения?
Я действительно не понимаю, как keys.contains (a) || values.contains (a) подразумевает, что пара будет головой или нет. Не могли бы вы рассказать о том, что значит быть «голова», и как вы используете contains()? – Glubus