You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过递归搜索遍历对象数组提取指定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"}]

修复要点说明

  1. 正确修改累加数组:用push(...relations)替代原数组扩展操作,直接将relations中的每个对象添加到_rel,确保数据被保留
  2. 递归传递累加数组:递归处理split时必须传入当前的_rel,让所有嵌套层级的relations都被收集到同一个数组中
  3. 兼容无有效字段的uuid对象:遇到有uuid但既无split也无relations的对象(比如示例中的uuid500),直接跳过不处理,不影响最终结果

内容的提问来源于stack exchange,提问作者Vikas Acharya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 01:57:08