js树结构扁平化

复制代码
  /**
     *
     * @param {Array} arrs 树形数据
     * @param {string} childs 树形数据子数据的属性名,常用'children'
     * @param {Array} attrArr 需要提取的公共属性数组(默认是除了childs的全部属性)
     * @returns
     */
    extractTree(arrs, childs = 'children', attrArr) {
      let attrList = []
      if (!Array.isArray(arrs) && !arrs.length) return []
      if (typeof childs !== 'string') return []
      if (!Array.isArray(attrArr) || Array.isArray(attrArr) && !attrArr.length) {
        attrList = Object.keys(arrs[0])
        attrList.splice(attrList.indexOf(childs), 1)
      } else {
        attrList = attrArr
      }
      const list = []
      const getObj = (arr) => {
        arr.forEach(function(row) {
          const obj = {}
          attrList.forEach(item => {
            obj[item] = row[item]
          })
          list.push(obj)
          if (row[childs]) {
            getObj(row[childs])
          }
        })
        return list
      }
      return getObj(arrs)
    },
相关推荐
菜鸟小码16 小时前
MapReduce 核心阶段深度解析:Map 阶段与 Reduce 阶段的作用及执行流程
前端·javascript·mapreduce
步步为营DotNet16 小时前
深入剖析.NET 11 中 Semantic Kernel 于智能后端集成的创新实践
前端·.net·easyui
@大迁世界16 小时前
33.如何在 React 中使用内联样式(inline styles)?
前端·javascript·react.js·前端框架·ecmascript
CodeSheep16 小时前
DeepSeek的最新招人标准,太讽刺了。
前端·后端·程序员
不法16 小时前
vue 地图路线渲染
前端·vue.js·ubuntu
GISer_Jing16 小时前
从“工具应用”到“系统重构”:AI时代前端研发的范式转移与哲学思辨
前端·人工智能·学习
我家媳妇儿萌哒哒16 小时前
Element ui el-dialog 在一个有滚动条的页面,打开一个弹框,完了再打开一个弹框后,滚动条可以滚动,怎么限制不能滚动。
前端·vue.js·ui
得想办法娶到那个女人16 小时前
Vite + Vue 项目打包为 Electron 桌面应用 完整指南
前端·vue.js·electron
Sailing16 小时前
🚀🚀CLI 为什么在 2025 年突然复兴?看懂 Agent、Skill、MCP、CLI 四层架构
前端·agent·ai编程
ZC跨境爬虫16 小时前
Apple官网复刻第二阶段day_3:(还原苹果官网iPhone顶部标准文案区块,一次编写全局复用)
前端·css·ui·html·iphone