JS рекурсивный поиск\перебор по массиву объектов

Подскажите пожалуйста, как рекурсивно пройтись по массиву и проверить что поля не совпадают? То есть когда я присваиваю "mandatory" напримкр "3" объекту c id "5" -- нужно проверить что его id не равно mandalority, и что в массиве у объекта с id "3" mandatory не равно "5", и что у объекта с id "1" mandatory не равно "3" или "5", и так далее вглубь...

В этом примере если у первого объекта mandatory "5" - ошибка, если у 3 объекта mandatory "5" - ошибка, если у 4 объекта mandatory "5" или "3" - ошибка.

[{
    id: 5,
    mandatory: 3
  },
  {
    id: 4,
    mandatory: 3
  },
  {
    id: 3,
    mandatory: 1
  },
  {
    id: 1,
    mandatory: null
  },
]


Ответы (1 шт):

Автор решения: Sezz Fess

let mandatoryEntry = arr.find(e => e.id === mandatory)
var endSearch = mandatoryEntry.mandatory === null
while (!endSearch) {
  if (mandatoryEntry.mandatory === id) {
    console.log(`Loop detected!!!`)
    return false
  }
  mandatoryEntry = arr.find(e => e.id === mandatoryEntry.mandatory)
  var endSearch = mandatoryEntry.mandatory === null
}

→ Ссылка