一种常见的递归对象数组的方式(对象有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号