遍历树结构,当节点的children为空时,递归处理children设为undefined(递归)(整理)

简介: 遍历树结构,当节点的children为空时,递归处理children设为undefined(递归)(整理)
//如果children为空数组,则children为 undefined
getTree() {
  this.$get('/distribution/pc/org/getTree/' + 0 + '/' + 0, {}).then((res) => {
    if (res.code == 1000) {
      this.options = this.getTreeData(res.data);  //获取树结构值
      res.data =[{
               label: '一级 1',
               children: [{
                 label: '二级 1-1',
                 children: []
               }]
             }, {
               label: '一级 2',
               children: [{
                 label: '二级 2-1',
                 children: [{
                   label: '三级 2-1-1'
                 }]
               }, {
                 label: '二级 2-2',
                 children: [{
                   label: '三级 2-2-1'
                 }]
               }]
             }, {
               label: '一级 3',
               children: []
             }]
      this.getTreeData(res.data); //获取树结构值
    }
  })
},
getTreeData(data) {
  // 循环遍历json数据
  for (var i = 0; i < data.length; i++) {
    //if(data[i].level == 1){ //可根据数据返回值-添加需要参数-此条件禁止第一列选中
      //data[i].disabled = true
    //}
    if (data[i].children.length < 1) {
      // children若为空数组,则将children设为undefined
      data[i].children = undefined;
    } else {
      // children若不为空数组,则继续 递归调用 本方法
      this.getTreeData(data[i].children);
    }
  }
  return data;
},
props: 返回参数不匹配的话,修改值比如children: 'child', 
<el-cascader :options="options" v-model="rankData.areaIdAll"
            :props="{value: 'id', label: 'name', children: 'child', multiple: true, checkStrictly: true }"
            collapse-tags style="width: 400px;" @change="change2(rankData.areaIdAll)"></el-cascader>
//获取选择后的值
change2(idList) {
  console.log(idList,'236')
  if (idList.length == 0) {
    this.areaId = [];
    return false;
  }
  var newArr1 = []; // 去重后的
  var newArr2 = []; // 重复的
  var newArr3 = []; // 只出现一次的
  if (idList.length > 1) {
    for (var i = 0; i < idList.length; i++) {
      for (var j = 0; j < idList[i].length; j++) {
        var v = idList[i][j];
        // 判断是否存在数组中,不存在在往下走
        if (!newArr1.includes(v)) {
          newArr1.push(v);
        } else {
          newArr2.push(v);
        }
      }
    }
    for (var i = 0; i < newArr1.length; i++) {
      var v = newArr1[i];
      if (!newArr2.includes(v)) {
        newArr3.push(v);
      }
    }
  } else {
    for (var i = 0; i < idList.length; i++) {
      for (var j = 0; j < idList[i].length; j++) {
        var v = idList[i][j];
        // 判断是否存在数组中,不存在在往下走
        if (!newArr1.includes(v)) {
          newArr1.push(v);
        } else {
          newArr2.push(v);
        }
      }
    }
    for (var i = 0; i < newArr1.length; i++) {
      if (newArr3.indexOf(newArr1[newArr1.length - 1]) === -1) {
        newArr3.push(newArr1[newArr1.length - 1])
      }
    }
  }
  this.areaId = newArr3;
},

外图:禁止选择省市区

相关文章
|
2月前
|
JSON 前端开发 数据格式
使用 el-tree 实现计算每个非叶子节点的后代节点的个数并显示
本文介绍了如何使用ElementPlus的`el-tree`组件实现计算并显示每个非叶子节点后代节点的个数,以及后代节点中ID为一万倍数的个数。
93 1
使用 el-tree 实现计算每个非叶子节点的后代节点的个数并显示
|
5月前
|
Java
DAY-1 | Java数据结构之链表:删除无头单链表中等于给定值 val 的所有节点
力扣203题解:使用时间复杂度为O(n)的思路删除链表中所有值为key的元素。引入辅助指针pre,记录cur的前一个节点,遍历链表时,若cur.val!=key,pre和cur同时前进;若cur.val==key,则pre.next=cur.next,cur继续前进,确保pre不急于跟随以处理连续相同值的情况。遍历结束后,处理头节点可能需要删除的特殊情况。
41 0
|
5月前
|
JavaScript 小程序
遍历类数组之获取多个dom节点并遍历
遍历类数组之获取多个dom节点并遍历
|
机器学习/深度学习 C++
【C/C++练习】经典的快慢指针问题---移除元素
【C/C++练习】经典的快慢指针问题---移除元素
59 0
删除链表中等于给定值 val 的所有节点
删除链表中等于给定值 val 的所有节点
【数据结构算法篇】链表面试题2—删除链表中等于给定值 val 的所有节点
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点
|
前端开发
el-tree懒加载中使用递归更改树节点状态值
el-tree懒加载中使用递归更改树节点状态值
223 0
|
Java 测试技术
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。(Java语言实现)
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。(Java语言实现)
158 0
给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。(Java语言实现)