如何通过递归搜索遍历对象数组提取指定relation字段
深度提取嵌套relations的递归修复方案
你的递归函数无法正常工作,核心问题有两个:
- 处理
relations时,[..._rel, relations]仅生成新数组但未修改原累加数组,等于无效操作 - 递归调用
getRelations(split)时未传递累加数组_rel,导致递归层的结果无法合并到主数组
修复后的代码如下:
const getRelations = (arr, _rel = []) => { for (let { uuid, relations, split } of arr) { if (uuid) { if (relations) { // 将relations数组的元素逐个推入累加数组 _rel.push(...relations); } else if (split) { // 递归处理split时传入当前的_rel,确保结果合并 getRelations(split, _rel); } // 有uuid但无split/relations的情况直接跳过 } } return _rel; } // 输入数组 let arr = [ { "start_offset": 0 }, { "uuid": "100", "relations": [ { "relation": "a", } ] }, { "start_offset": 355 }, { "uuid": "200", "split": [ { "uuid": "300", "split": [ { "uuid": "400", "relations": [ { "relation": "b", } ] } ] }, { "uuid": "500", } ], }, { "start_offset": 689 } ] // 调用测试 let _rel = getRelations(arr); console.log(_rel); // 输出:[{"relation":"a"},{"relation":"b"}]
修复要点说明
- 正确修改累加数组:用
push(...relations)替代原数组扩展操作,直接将relations中的每个对象添加到_rel,确保数据被保留 - 递归传递累加数组:递归处理split时必须传入当前的
_rel,让所有嵌套层级的relations都被收集到同一个数组中 - 兼容无有效字段的uuid对象:遇到有uuid但既无split也无relations的对象(比如示例中的uuid500),直接跳过不处理,不影响最终结果
内容的提问来源于stack exchange,提问作者Vikas Acharya
相关产品推荐
相关产品推荐

