嵌套的数组对象拉平和改变key值的递归方法

例如这样的数组:每一级下面有childer也可能没有

const exampleArr = [
  {
   id:'01',
   title:'菜单一',
   childer:[
    {
      id:'010',
      title:'二级菜单, 
      childer:[
          {
           id:'0100',
           title:'三级菜单1, 
          },
          {
           id:'0101',
           title:'三级菜单2, 
          },
        ]
   }
   ]
  },
 {
   id:'02',
   title:'菜单二',
  },
 {
   id:'03',
   title:'菜单三',
   childer:[
        {
          id:'0100',
          title:'三级菜单,
         }
        ]
  },
]

1.拉平数组对象的方法封装:

const flatMethod = (arr, key) => {
  return [].concat(
    ...arr.map((item) => {
      return [].concat(item, ...flatArrMethod(item[key] || [], key));
    })
  );
};

获取拉平后的数组:

const getFlatExampleArr = flatMethod(exampleArr,'childer')

2.递归改变嵌套数组对象的key值。这里childer是写死的,也可以传进来。
循环时可以改变每一层的对象

const changeArrKeyMethod = (sourceArr) => {
  for (let i = 0; i < sourceArr.length; i++) {   // for循环传入的数组
      sourceArr[i] = { ...findItem, title: sourceArr[i].name, routes: sourceArr[i].subMenuNode };  // 每一项在这一步做改变
    
    // 如果这一项下面还有数组再循环一次
    if (sourceArr[i].childer && sourceArr[i].childer.length > 0) {
      changeArrKeyMethod(sourceArr[i].childer);
    } 
  }
};

获取改变后的数组:

changeArrKeyMethod(exampleArr)
console.log(exampleArr)

你可能感兴趣的:(嵌套的数组对象拉平和改变key值的递归方法)