js反向递归查找值

14 篇文章 0 订阅
7 篇文章 0 订阅

业务开发中tree树数据经常打交道,经常需要用到递归去操作更改数据。
现在遇到一个后台传给你一个某个位置的id值且需要你向上一层一层获取数据的值,这个时候你就需要反向递归去获取数据。
记录一次才坑经历吧

思路1
之前是想把源数据转成json字符串去查找,这样性能应该能更好,少了很多循环操作。后面发现自己正则似乎太菜了学的都还给老师了无奈只好放弃这种方法,

思路2
正常递归源数据数组 判断children值以及使用数组的some方法判断是否需要继续递归下去还是从头递归;
贴代码

	// 反递归查找
    function formTree(list, id) {
      // const st = JSON.stringify(props.treeData);
      // st.lastIndexOf(`"id":${props.deptId}`)
      list.forEach(item => {
        if (item.children && item.children.length) {// 判断是否有children子集
          if (item.children.some(row => row.id === id)) {// 判断子集里是否有想要的值来进行是否需要继续递归还是从头递归
            treeId.value.push(item.id);// 接收符合的数据id
            formTree(props.treeData, item.id) // 从头递归
          } else formTree(item.children, id) // 继续递归
          
        } else return
      })
    }


	watchEffect(() => {
      visible.value = props.showModal;
      if (props.showModal) {// modal弹窗状态
        if (props.deptId && props.treeData) {// props.deptId源数组某一处的id  props.treeData源数组数据
          treeId.value = []; // 接收id的数组
          treeId.value.push(props.deptId);
          formTree(props.treeData, props.deptId);// 递归
        }
      }
	})

以上 treeId.value里就是想要的id值合集

如果有更好的方法思路可以带带弟弟哦

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值