急急急,前端处理后端返回数据,要求把数组转化为树形结构数据,求大佬解答。

// 原始数据转化前

const data = [{
    id: 'f',
    body: {
      next: ['a','b']
    }
},{
    id: 'a',
    body: {
      next: ['k']
    }
},{
    id: 'b',
    body: {
      next: []
    }
}]

// 数据转化后

const preData = [{
    id: 'f',
    children: [{
        id: 'a',
        children: [{
            id: 'k',
            children: []
        }]
    },{
        id: 'b',
        children: []
    }]
}]
阅读 2.5k
3 个回答

image.png
递归代码不知道扔哪里了,写个简陋的吧。

data = [{
    id: 'f',
    body: {
      next: ['a','b']
    }
},{
    id: 'a',
    body: {
      next: ['k']
    }
},{
    id: 'b',
    body: {
      next: []
    }
}]
hash = data.reduce((s, n)=>{
    s[n.id] = n
    return s
}, {});
data.reduce((s, n)=>{
    s[n.id] = n;
    n.children = n.body.next.map(v=>hash[v] || {id: v, children: []})
    return s
}, {});
[hash.f]

上述数据的意思是'f' 为根节点,会有相应的子节点等。 需要把原始的数组类型数据 转化为树形结构。 求大佬解答

function transform (input) {
  const table = {};
  for (const { id, body: { next } } of input) {
    Object.assign(
      table[id] ?? (table[id] = {}),
      {
        id,
        children: next.map(id => {
          if (!table[id]) {
            Object.defineProperty(
              table,
              id,
              {
                enumerable: false,
                value: { id, children: [] },
              },
            );
          }

          return table[id];
        }),
      },
    );
  }

  return Object.values(table);
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏