求教一个js递归函数的写法

工作中需要用到一个js递归的写法,实在写不出来,求帮助,可以加微信发大红包!!!有诚信~~~
数据结构如下:

[
      {
        key: '1',
        name: 'name',
        label: '人事管理',
        items: [
          {
            name: 'name',
            key: '1-1',
            label: '员工管理',
            items: [
              {
                name: 'name',
                key: '1-1-1',
                label: '员工管理-0',
                items: [
                  {
                    name: 'name',
                    key: '1-1-1-1',
                    label: '员工管理-0-0',
                    items: '',
                  },
                  {
                    name: 'name',
                    key: '1-1-1-2',
                    label: '员工管理-0-1',
                    items: '',
                  },
                ],
              },
              {
                name: 'name',
                key: '1-1-2',
                label: '员工管理-1',
                items: '',
              },
            ],
          },
          {
            name: 'name',
            key: '1-2',
            label: '部门管理',
            items: [
              {
                name: 'name',
                key: '1-2-1',
                label: '部门管理1',
                items: '',
              },
              {
                name: 'name',
                key: '1-2-2',
                label: '部门管理2',
                items: '',
              },
            ],
          },
          {
            name: 'name',
            key: '1-3',
            label: '职位管理',
            items: [
              {
                name: 'name',
                key: '1-3-1',
                label: '职位管理1',
                items: '',
              },
              {
                name: 'name',
                key: '1-3-2',
                label: '职位管理2',
                items: '',
              },
            ],
          },
        ],
      },
    ];

可能有无数层级递归下去...要求是,数据中的'key'字段本身是没有的,要循环生成出来,按照层级,生成出n-n-n的格式...所以就是,一个递归函数,传入这样一组数据,返回结构和内容一致,但是带有n-n-n的key的数据...

阅读 2.7k
2 个回答
function f(datas, keys) {
  datas.forEach((item, i) => {
    keys.push(i + 1)
    item.key = keys.join('-')
    if (item.items) {
      f(item.items, keys)
    }
    keys.pop()
  })
  return datas
}

console.log(f([
      {
        name: 'name',
        label: '人事管理',
        items: [
          {
            name: 'name',
            label: '员工管理',
            items: [
              {
                name: 'name',
                label: '员工管理-0',
                items: [
                  {
                    name: 'name',
                    label: '员工管理-0-0',
                    items: '',
                  },
                  {
                    name: 'name',
                    label: '员工管理-0-1',
                    items: '',
                  },
                ],
              },
              {
                name: 'name',
                label: '员工管理-1',
                items: '',
              },
            ],
          },
          {
            name: 'name',
            label: '部门管理',
            items: [
              {
                name: 'name',
                label: '部门管理1',
                items: '',
              },
              {
                name: 'name',
                label: '部门管理2',
                items: '',
              },
            ],
          },
          {
            name: 'name',
            label: '职位管理',
            items: [
              {
                name: 'name',
                label: '职位管理1',
                items: '',
              },
              {
                name: 'name',
                label: '职位管理2',
                items: '',
              },
            ],
          },
        ],
      },
    ], []))
filters(option,rs){
  option.forEach((r,i)=>{
    r.keys=rs.keys ? rs.keys+'-'+Number(i+1) : Number(i+1)+'';
    if(r['items']){
      this.filters(r.items,r)
    }
  })
  return option
},
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题