js 嵌套联级数组的递归

1、根据子级标识获取其所在的对象

//调用
  	this.getTreeObjByUrl(嵌套数组data, url);

 // 根据url找到其相应的tree位置
    getTreeObjByUrl(treeData, url) {
      for (let item of treeData) {
        if (item.children && item.url != url) {
          this.getTreeObjByUrl(item.children, url);
        } else if (item.url == url) {
          this.preUrlObj = item;
          return item;
        }
      }
    },

2、根据子级找到父级

//调用
  	let urlArr = this.bindFindKeys(
          treeData,
          id
        );
 // // 根据子级找到父级
 bindFindKeys(list, id) {
      if (!list || !id) {
        return '';
      }
      let arr = [];
      let findParent = (data, nodeId, parentId) => {
        for (var i = 0, length = data.length; i < length; i++) {
          let node = data[i];
          if (node.permissionId === nodeId) {
            arr.unshift(node);
            if (nodeId === list[0].permissionId) {
              break;
            }
            findParent(list, parentId);
            break;
          } else {
            if (node.children) {
              findParent(node.children, nodeId, node.permissionId);
            }
            continue;
          }
        }
        return arr;
      };
      return findParent(list, id);
    },

3、获取指定层级

/**
 * @description 获取层级
 * @param {String,Array,String}
 * @param
 * @return {Object}
 */
export const getAdTreeByCount = (tree, level) => {
  var newArr = [];
  for (var i = 0; i < tree.length; i++) {
    var item = tree[i];
    if (level === 1) {
      newArr.push({
        label: item.label,
        lat: item.lat,
        level: item.level,
        lon: item.lon,
        parentCode: item.parentCode,
        value: item.value,
        leaf: item.leaf,
        children: []
      });
      break;
    }
    // 删除大于level级
    if (item.level > level) {
      tree.splice(i--, 1);
    } else {
      if (item.children) {
        item.children = getAdTreeByCount(item.children, level);
      }
      if (item.level == level) {
        item.leaf = true;
        item.children = null;
      }
      newArr.push(item);
    }
  }
  return newArr;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值