多维数组遍历添加新属性,以及获取所有key

复制代码
// 后台返回菜单json数据,根据组件缺少key 与title,需对数据进行二次加工。

// 菜单结构树转换
export const changeMenuTreeData = (arr) => {
  if (arr) {
    arr.forEach((item, index) => {
      // item.child_type=1 表示含有子菜单; item.child_type=2 表示含有子功能
      if (Number(item.child_type) === 1) {
        // 含有子菜单
        item.key = item.id ? `menu-${item.id}` : `menu-${index}`
        item.title = item.app_name ? item.app_name : item.name
        if (item.children) changeMenuTreeData(item.children)
      } else if (Number(item.child_type) === 2) {
        // 含有子菜单
        item.key = item.id ? `func-${item.id}` : `func-${item.name}-${index}`
        item.title = item.name
        if (item.func) changeMenuTreeData(item.func)
      } else {
        item.key = item.id ? `func-${item.id}` : `func-${item.name}-${index}`
        item.title = item.name
      }
    })
  }
  return arr
}
// 获取菜单结构树所有key,默认下拉树展开
export function getKey(arr, newArr) {
  newArr = newArr || []
  arr.forEach((item, index) => {
    if (item['key']) {
      newArr.push(item['key'])
      if (item['children']) {
        getKey(item['children'], newArr)
      }
    }
  })
  return newArr
}
复制代码

 

posted @   Gaochunling  阅读(575)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示