如何用递归遍历嵌套对象数组,将所有innerArray替换为subArray
递归替换嵌套对象数组的属性名实现方案
核心逻辑
- 对每一层数组的元素做统一处理:只要对象存在
innerArray属性,就将其重命名为subArray - 重命名完成后,对新的
subArray子数组执行相同的转换逻辑,实现递归遍历所有嵌套层级 - 无需判断子数组是否为空,空数组也需要完成属性替换,符合输出要求
修正后的完整代码
你原来的代码存在几个问题:函数定义语法错误、递归调用未传参、遗漏了空数组的替换逻辑。下面是可直接运行的实现:
版本1:修改原对象(性能更高)
// 函数定义修正,不要混用function声明和箭头函数写法 function transformData(data) { for(let i = 0; i < data.length; i++) { const current = data[i]; // 判断当前对象是否存在innerArray属性 if ('innerArray' in current) { // 替换属性名 current.subArray = current.innerArray; delete current.innerArray; // 递归处理子数组,不管是否为空 transformData(current.subArray); } } return data; } // 测试 const data = [ {name: 'First', innerArray: [{name: 'InnerFirst', innerArray: []}]}, {name: 'Second', innerArray: []} ]; console.log(transformData(data));
版本2:返回新对象(无副作用,不修改原始数据)
function transformData(data) { return data.map(item => { // 复制新对象避免修改原数据 const newItem = {...item}; if ('innerArray' in newItem) { // 递归处理子数组后赋值给新属性 newItem.subArray = transformData(newItem.innerArray); delete newItem.innerArray; } return newItem; }) }
内容的提问来源于stack exchange,提问作者DevOverflow
相关产品推荐
相关产品推荐

