一种常见的递归对象数组的方式(对象有children属性)
背景概要
前端开发经常会遇到需要对元素为对象的数组做递归操作,常见的场景如路由权限验证、嵌套组件的配置对象初始化等。通常,这类对象包含一个 children 属性,通过判断 children 属性开启下一层递归。
示例代码
recursiveChildren(arr, fn) {
  // 初始化
  let newArr = [];
  // ...一些辅助过程
  if (arr.length > 0) {
    arr.forEach((ele) => {
      let newEle = Object.assign({}, ele); // 复制原对象的属性
      // 根据原对象的某些属性或特征(如代表序号的数组下标)执行特定操作,如新增属性、修改属性值/属性值类型、删除属性等,并返回结果
      // newEle = fn(newEle, ele); // 此时直接返回新对象;如果不是通过回调函数执行操作,也可以直接设置新对象的属性
      if (ele?.children?.length > 0) { // 原对象包含 children 属性且子元素不为0
        newEle.children = recursiveChildren(ele.children, fn); // 开启新一轮递归
      }
      // 
      newArr.push(newEle); // 添加新创建的子元素
    });
  } else {
    console.error('Type Error: the 1st param should be type [Array].');
  }
  return newArr; // 最后返回新数组
}
此例为最基本的递归结构,实际项目中使用时,可能还包含其他过程,
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号