当前位置: 网站首页>小程序开发>网站制作

固始微信公众号开发【固始网络推广】固始建站、固始网站维护、固始网页制作、固始微信小程序代运营公司

发表日期: 2021-05-10 14:31:13 浏览次数:114

固始微信公众号开发【固始网络推广】固始建站、固始网站维护、固始网页制作、固始微信小程序代运营公司

网站建设.jpg

固始县,河南省直管县,信阳市代管 [1]  。位于河南省东南端,豫皖两省交界处,南依大别山,北临淮河,总面积2946平方千米。截至2018年,固始县下辖3个街道、19个镇、11个乡 [2]  ,常住人口109.65万人。

因历史上有四次大规模人口南迁,固始县成为中原地区向闽台一带移民的肇始地和集中地,有“唐人故里,闽台祖地”和“中原第一侨乡”之称 [3]  。唐初“开漳圣王”陈元光、唐末“闽王”王审知、民族英雄郑成功、靖海侯施琅、爱国华侨陈嘉庚等先贤名人的祖籍地均为固始。是河南省确定的五个加快发展的区域性中心城市和十个省直管体制改革试点县之一。 [4]  2019年5月9日,经河南省级专项评估检查,固始县达到脱贫摘帽标准,正式退出贫困县序列。 [5] 

2018年,固始县地区生产总值(GDP)350.42亿元,其中,第一产业增加值73.89亿元,第二产业增加值109.43亿元,第三产业增加值167.10亿元,三次产业结构为:21.1:31.2:47.7。 [6] 


前言

将数组处理成树状结构,也是在工作中经常遇到的,今天就和大家一起分享一下思路和方法。

案例

如下代码,处理成树状结构,要求程序具有容错能力,也就是可以判断输入出错。

let haoroomsDataArr = [
  { id: 1, name: "haorooms1" },
  { id: 2, name: "haorooms2", parentId: 1 },
  { id: 4, name: "haorooms4", parentId: 3 },
  { id: 3, name: "haorooms3", parentId: 2 },
  { id: 8, name: "haorooms18", parentId: 7 },];

思路

要求处理成树状结构,那么肯定有根节点,从根节点延伸出对应的children,然后再看子节点是否有子节点。

1、首先找出根节点,没有parentId的就是根节点2、有父节点的均为子节点,根据关联的父节点,设置到一个父节点的对象数组中。3、针对同一个父节点的子节点数组,因为关联的父节点是惟一的。可以把父节点作为键,所有子节点放到键值对中。4、根据节点的id,查找以节点id为建的children数组,递归查找是否都有子节点,没有就是leaf节点,或者children为null

异常

1、父节点不存在2、无子节点(叶子节点)

代码

function getTree(arr) {
  if (!arr || !Array.isArray(arr)) return "错误的数据类型";
  var len = arr.length;
  if (!len) return "空数组";
  var rootObj = { id: null, name: null, children: [] };
  var nodeObj = {};
  for (var i = 0; i < len; i++) {
    if (!arr[i].parentId) {
      rootObj = {
        id: arr[i].id,
        name: arr[i].name,
        children: [],
      };
    } else {
      if (nodeObj.hasOwnProperty(arr[i].parentId)) {
        nodeObj[arr[i].parentId].children.push(arr[i]);
      } else {
        nodeObj[arr[i].parentId] = {};
        nodeObj[arr[i].parentId].children = [];
        nodeObj[arr[i].parentId].children.push(arr[i]);
      }
    }
  }
  function getChildren(node) {
    if (nodeObj[node.id] && nodeObj[node.id].children) {
      node.children = nodeObj[node.id].children;
      delete nodeObj[node.id];
      var len = node.children.length;
      if (len > 0) {
        for (var i = 0; i < len; i++) {
          getChildren(node.children[i]);
        }
      }
    } else {
      console.log(`${node.id}没有children`);
    }
  }
  getChildren(rootObj);

  for (var p in nodeObj) {
    if (nodeObj.hasOwnProperty) {
      console.warn(p + ":没有该父节点");
    }
  }
  return rootObj;}

方法二

const buildTree = (data, config = {}) => {
  if (!data || !Array.isArray(data)) return "错误的数据类型";
  const len = data.length;
  if (!len) return "空数组";
  const id = (config && config.id) || "id";
  const pid = (config && config.pid) || "parentId";
  const children = (config && config.children) || "children";

  // 把所有的ID映射为一个map 方便查询
  const idMap = {};
  // 找到父节点的放入 treeData
  const treeData = [];
  // 节点包含 pid 属性, 并且父节点不存在的放入 errorData
  const errorData = [];

  data.forEach((v) => {
    v && (idMap[v[id]] = v);
  });

  data.forEach((v) => {
    if (v) {
      let parent = idMap[v[pid]];
      if (parent) {
        !parent[children] && (parent[children] = []);
        parent[children].push(v || []);
      } else if (!parent && v.hasOwnProperty(pid)) {
        errorData.push(v);
      } else {
        treeData.push(v);
      }
    }
  });
  // 树结构 错误数据同时返回
  // return {
  //   treeData,
  //   errorData
  // }
  // 只返回树结构
  return treeData;};


固始微信公众号开发固始网络推广固始建站、固始网站维护、固始网页制作、固始微信小程序代运营公司

400-111-6878
服务热线
顶部

备案号: 苏ICP备11067224号

CopyRight © 2011 书生商友信息科技 All Right Reserved

24小时服务热线:400-111-6878   E-MAIL:1120768800@qq.com   QQ:1120768800

  网址: http://www.768800.com  网站建设上往建站

关键词: 网站建设| 域名邮箱| 服务器空间| 网站推广| 上往建站| 网站制作| 网站设计| 域名注册| 网络营销| 网站维护|

企业邮箱| 虚拟主机| 网络建站| 网站服务| 网页设计| 网店美工设计| 网站定制| 企业建站| 网站设计制作| 网页制作公司|

400电话办理| 书生商友软件| 葬花网| 调温纤维| 海洋馆运营维护| 北京保安公司| 殡仪馆服务| 殡葬服务| 苏州殡葬一条龙| 朝阳殡葬| 苏州殡葬服务|

预约专家

欢迎您免费咨询,请填写以下信息,我们收到后会尽快与您联系

  

服务热线:400-111-6878