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

如何修改JS递归函数获取嵌套对象中所有匹配键值对的路径

修改思路

原函数存在两个问题:

  1. 递归调用时参数顺序传反,会导致匹配逻辑错误
  2. 找到第一个匹配项就直接返回,没有收集全量结果
    修改时我们可以在每次函数调用时初始化结果数组,遍历当前层级所有键值对,收集子层级返回的匹配路径以及当前层级的匹配路径,最终返回全量结果即可。

修改后代码

function getPath(obj, givenKey, givenValue) {
    // 初始化数组存储所有匹配路径
    const results = [];
    for (let key in obj) {
        // 处理数组/对象类型的值,递归查找
        if (obj[key] && typeof obj[key] === "object") {
            // 参数顺序和函数定义保持一致,避免原函数的传参错误
            const childResults = getPath(obj[key], givenKey, givenValue);
            // 子级返回的每个路径都拼接上当前层级的key
            childResults.forEach(path => {
                path.unshift(key);
                results.push(path);
            })
        } 
        // 当前键值对匹配目标,直接存入结果
        else if (key === givenKey && obj[key] === givenValue) {
            results.push([key]);
        }
    }
    return results;
}

测试效果

调用getPath(myObj, "name", "needle")会直接返回你需要的结果:

[
  [0, "name"],
  ["2", "children", "0", "children", "1", "children", "0", "name"]
]

额外说明

如果不需要数字类型的数组索引(比如希望所有路径项都是字符串),可以在unshift的时候将key转为字符串:path.unshift(String(key))即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 21:06:01