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)
    },
相关推荐
少卿2 分钟前
PerformanceObserver 性能条目类型(Entry Types)
前端·javascript
宇余3 分钟前
ES2025新特性实战:5分钟get前端高频实用语法
前端·typescript
励扬程序3 分钟前
Cocos Creator 3.8 实现指定Node节点截图功能教程
前端·cocos creator
jenchoi4138 分钟前
【2025-11-15】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
前端·网络·安全·网络安全·npm·node.js
进击的野人8 分钟前
防抖与节流:优化前端性能的两种关键技术
前端·javascript
小高0079 分钟前
别再滥用 Base64 了——Blob 才是前端减负的正确姿势
前端·javascript·面试
黑羽同学9 分钟前
Fix: 修复AI聊天输入框Safari回车发送bug
前端·javascript·dom
数据知道11 分钟前
FastAPI基础项目:仿头条新闻的web项目,实现基本的新闻列表页和详情页查看功能
前端·python·fastapi·python项目
wc_xue_fei_le26 分钟前
11.11DNS主从服务器
linux·服务器·前端
女生寝室03829 分钟前
《Chrome》 [142.0.7444.60][绿色便携版] 下载
前端·chrome