鍍金池/ 問答/C++  HTML/ 求教一個js遞歸函數(shù)的寫法

求教一個js遞歸函數(shù)的寫法

工作中需要用到一個js遞歸的寫法,實在寫不出來,求幫助,可以加微信發(fā)大紅包!!!有誠信~~~
數(shù)據(jù)結(jié)構(gòu)如下:

[
      {
        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: '',
              },
            ],
          },
        ],
      },
    ];

可能有無數(shù)層級遞歸下去...要求是,數(shù)據(jù)中的'key'字段本身是沒有的,要循環(huán)生成出來,按照層級,生成出n-n-n的格式...所以就是,一個遞歸函數(shù),傳入這樣一組數(shù)據(jù),返回結(jié)構(gòu)和內(nèi)容一致,但是帶有n-n-n的key的數(shù)據(jù)...

回答
編輯回答
別瞎鬧
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
},
2017年7月6日 10:11
編輯回答
司令
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: '',
              },
            ],
          },
        ],
      },
    ], []))
2017年7月15日 22:09