树形结构数据处理

两种方法:

方法一:使用map

const getData = () => {
    getOrganization({}).then((res) => {
        console.log(res)
        options.value = res.data.map((node) => ({
            id: node.id,
            title: node.title,
            children: node.children
                ? node.children.map((child) => ({
                      id: child.id,
                      title: child.title,
                      children: child.children
                          ? child.children.map((grandchild) => ({
                                id: grandchild.id,
                                title: grandchild.title,
                            }))
                          : [],
                  }))
                : [],
        }))
        console.log(options.value, 'options.value')
    })
}

方法二:使用递归

// 使用递归第一种方法
const props = withDefaults(defineProps<{ orgSelect: OrgSelectProps }>(), {
    orgSelect: () => {
        return {
            managementId: '',
            parkId: '',
            compId: '',
        }
    },
})

const options = ref([])
const getData = () => {
    getOrganization({}).then((res) => {
        options.value = formatTree(res.data, Object.keys(props.orgSelect).length)
    })
}

function formatTree(data: any[], depth) {
    if (depth) {
        return data.map((i) => {
            return {
                id: i.id,
                title: i.title,
                children: formatTree(i.children, depth - 1),
            }
        })
    }
    return null
}


// 使用递归第二种方法
function flattenTreeData(data) {
  const result = []
  
  function flatten(node) {
    // 将当前节点加入结果数组
    result.push({
      id: node.id,
      name: node.name
    })
    
    // 如果当前节点有子节点,继续递归处理
    if (node.children) {
      node.children.forEach(child => flatten(child))
    }
  }
  
  // 对初始数据进行递归处理
  data.forEach(item => flatten(item))
  
  return result
}

const flatData = flattenTreeData(treeData)
console.log(flatData)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值