业务开发中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值合集
如果有更好的方法思路可以带带弟弟哦