美文网首页
将平铺数组转化成 树状数组结构

将平铺数组转化成 树状数组结构

作者: 秘果_li | 来源:发表于2022-06-15 11:49 被阅读0次

数组中的 id 作为数据结点唯一标识,pid 表示对应的父节点 id,顶层结点 pid 为0

const data = [
  {
    id: 2,
    pid: 0,
    name: '父级菜单1',
  },
  {
    id: 3,
    pid: 0,
    name: '父级菜单2',
  },
  {
    id: 1,
    pid: 0,
    name: '父级菜单3',
  },
  {
    id: 4,
    pid: 3,
    name: '2的子菜单1',
  },
  {
    id: 11,
    pid: 3,
    name: '2的子菜单2',
  },
  {
    id: 20,
    pid: 3,
    name: '2的子菜单3',
  },
  {
    id: 26,
    pid: 2,
    name: '1的子菜单1',
  },
  {
    id: 50,
    pid: 20,
    name: '子菜单3的子菜单1',
  },
];

使用 map 数据结构对应,遍历一次 data 数组 O(n) 时间复杂度完成树状结构转换

const toTree = data => {
  let result = [];
  if (!Array.isArray(data)) {
    return result;
  }
  // 清除已存在的children 重新赋值
  data.forEach(item => {
    delete item.children;
  });

  let map = {};
  data.forEach(item => {
    map[item.id] = item;
  });

  data.forEach(item => {
    let parent = map[item.pid];
    if (parent) {
      (parent.children || (parent.children = [])).push(item);
    } else {
      result.push(item);
    }
  });
  return result;
};

相关文章

  • 将平铺数组转化成 树状数组结构

    数组中的 id 作为数据结点唯一标识,pid 表示对应的父节点 id,顶层结点 pid 为0 使用 map 数据结...

  • js数组平铺和树形结构的转换

    将一个平铺的数据转换成一个树形的数据结构 将树形结构的数组转换成平铺的数组

  • 树状结构转一维数组

    树状结构转数组方法 声明树状对象

  • 树状数组

    复习一下树状数组 树状数组 一种用于处理单点修改和区间查询的数据结构。树状数组C的定义: C[x] = Sum ...

  • js 数组去重,格式转换方法

    1,对象数组去重 2,用js实现将二维数组格式化转换成树状数组 3,将树结构数据转换为一维数组 4, 数组去重

  • 【数据结构】树状数组

    【数据结构】树状数组 讲到了线段树,那就顺便讲讲树状数组吧。 问题: 一个固定大小 n 的有限数组 xaction...

  • 结构与算法(05):二叉树与多叉树

    一、树状结构 1、数组与链表 数组结构 数组存储是通过下标方式访问元素,查询速度快,如果数组元素是有序的,还可使用...

  • 数据结构与算法:二叉树与多叉树还可以这么解释!

    一、树状结构 1、数组与链表 数组结构 数组存储是通过下标方式访问元素,查询速度快,如果数组元素是有序的,还可使用...

  • 树状数组

    首先树状数组,就是用数组来模拟树形结构.和「堆」一样,树状数组的 0 号下标不放置元素,从 1 号下标开始使用。 ...

  • 树状数组-leetcode-307

    在leetcode-307题目中初次接触了树状数组这个数据结构。树状数组用于高效地对数组进行更新以及求前缀和。 l...

网友评论

      本文标题:将平铺数组转化成 树状数组结构

      本文链接:https://www.haomeiwen.com/subject/eyqxvrtx.html