Как преобразовать JSON в массив деревьев в JS? - PullRequest
1 голос
/ 14 июня 2019

Я хотел бы преобразовать этот json / объект в указанную ниже конкретную структуру, чтобы позволить мне использовать компонент treeList.

Я пытался создать рекурсивную функцию, но пока не нашел решения,Спасибо за вашу помощь

const data = {
  parent1: {
    child1: { bar: "1" },
    child2: "2"
  },
  parent2: {
    child1: "1"
  }
}

до

const treeData = [
  {
    title: "parent1",
    key: "parent1",
    children: [
      {
        title: "child1",
        key: "child1",
        children: [{ title: "bar", key: "bar", value: "1" }]
      },
      {
        title: "child2",
        key: "child2",
        value: "2"
      }
    ],
  },
  {
    title: "parent2",
    key: "parent2",
    children: [
      {
        title: "child1",
        key: "child1",
        value: "1"
      }
    ]
  }
]

1 Ответ

1 голос
/ 14 июня 2019

Вы можете использовать итеративный и рекурсивный подход.

function getNodes(object) {
    return Object
        .entries(object)
        .map(([key, value]) => value && typeof value === 'object'
            ? { title: key, key, children: getNodes(value) }
            : { title: key, key, value }
        );
}

const data = { parent1: { child1: { bar: "1" }, child2: "2" }, parent2: { child1: "1" } },
    result = getNodes(data);

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...