将数组展开为没有父 ID 但具有级别的树

我有点被暗示递归的东西困住了。我正在从 API 接收数据。它看起来像这样:


const input = [

  { id: 'a', level: 0 },

  { id: 'b', level: 1 },

  { id: 'c', level: 1 },

  { id: 'd', level: 2 },

  { id: 'e', level: 1 },

  { id: 'f', level: 0 },

];

我需要类似的东西


const out = [

  { id: 'a', nodes: [

    { id: 'b', nodes: [] },

    { id: 'c', nodes: [

      { id: 'd', nodes: [] },

    ] },

    { id: 'e', nodes: [] },

  ] },

  { id: 'f', nodes: [] },

];

您将如何以优雅的方式实现这一目标,例如out = f(input)?


我觉得我们可以通过 reduce 来做一个递归的嵌套方法,但我没能做到:)


隔江千里
浏览 262回答 2
2回答

森林海

你可以试试,function makeObject(id){  return { id: id, nodes:[] };}function addObjectToNodes(array, id, node){  array.map(a => {    if(a.id === id)      a.nodes.push(node);  });}const nodes = [];nodes.push(makeObject('a'));nodes.push(makeObject('f'));addObjectToNodes(nodes, 'a', makeObject('b'));addObjectToNodes(nodes, 'a', makeObject('c'));addObjectToNodes(nodes, 'a', makeObject('d'));addObjectToNodes(nodes, 'a', makeObject('e'));console.log(nodes);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript