Найти рекурсивный (круговой) идентификатор в массиве Javascript объектов - PullRequest
0 голосов
/ 02 апреля 2020
users= [
{Id: 1, parentId: 2},
{Id: 2, parentId: 3},
{Id: 3, parentId: 4},
{Id: 4, parentId: 1}
]

У меня есть массив объектов. Как я могу получить Id циклического возврата true, если массив имел.

1-2 2-3 3-4 4-1

case: наконец, Id 1 parentId не должен быть 1 .

1 Ответ

0 голосов
/ 02 апреля 2020

Вам необходимо пройти по «дереву» и отследить все встречающиеся узлы Id. Если вы столкнулись с данным Id более одного раза, отобразите ошибку.

  users = [
    { Id: 1, parentId: 2 },
    { Id: 2, parentId: 3 },
    { Id: 3, parentId: 4 },
    { Id: 4, parentId: 1 },
    { Id: 34, parentId: 34 },
  ]

  var ids = {}
  users.forEach(function (e) {
    if (e.Id == e.parentId) {
      console.log(`${e.Id} has same parent ${e.parentId}`)
    }
    if (ids[e.Id] || ids[e.parentId]) {
      console.log(`For id ${e.Id}, found duplicate parent ${e.parentId}`)
    }
    ids[e.Id] = true
  })
...