Объединить вложенные отношения с объектом - PullRequest
0 голосов
/ 09 июля 2020

У меня есть массив объектов, который также содержит такой массив:

let array = [{"a": ["b", "c"]} , {"b":[ "d" ]}, {"e":[ "f" ]}]

Мне нужно отобразить его в виде дерева, и мне нужно получить результат, как показано ниже:

[
    {
        id : "a",  
        children: [ 
            {
                id: "b", 
                children: [{id: "d", children: [] }]
            },
            {
                id: "c",
                children: []
            }
        ]
    },
    {
        id: "e",
        Children: [
            {
                id: "f",
                children: []
            }
        ]
    }
]

Я попытался сделать это путем создания массива всех родителей [a, b, e] и поиска в глубину по всему массиву, но мне не удалось получить правильный результат.

Может кто-нибудь помочь? Заранее спасибо.

1 Ответ

2 голосов
/ 09 июля 2020

Попробуйте этот рекурсивный подход:

var array = [{ "a": ["b", "c"] }, { "b": ["d"] }, { "e": ["f"] }]
let object = {}
array.map(itm => Object.keys(itm).map(name => object[name] = itm[name]))

const treeView = (key, val) => {
  delete object[key]
  return {
    id: key,
    children: getChildrens(val)
  }
}
const getChildrens = (arr) => {
  let childrens = []
  return arr.map(itm => {
    if (object[itm]) {
      return treeView(itm, object[itm])
    }
    return { id: itm, children: [] }
  })
}
let res = Object.keys(object).map((val, idx) => {
  if (object[val])
    return treeView(val, object[val])
}).filter(e=>e)
console.log(res)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...