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

如何在JavaScript中根据子对象值动态查找父JSON对象的值

如何根据子对象值动态查找父JSON对象的值

这问题挺常见的,处理这种多层嵌套的JSON结构,递归遍历是最直观且高效的方案。我给你写一个专门的函数,刚好能匹配你的需求:

function findParentName(targetName, nodes) {
  // 遍历当前层级的所有节点
  for (const node of nodes) {
    // 检查当前节点的子节点中是否存在目标值
    const foundChild = node.children.find(child => child.name === targetName);
    if (foundChild) {
      // 找到目标子节点,返回当前节点的name
      return node.name;
    }
    // 递归遍历当前节点的子节点,继续查找
    const recursiveResult = findParentName(targetName, node.children);
    if (recursiveResult) {
      // 递归找到结果,返回它
      return recursiveResult;
    }
  }
  // 遍历完所有节点都没找到,返回null
  return null;
}

// 你的原始JSON对象
var obj = [ 
  { 
    "name": "A1", 
    "children": [ 
      { 
        "name": "A1-level1-child1", 
        "children": [ 
          { 
            "name": "A1-level2-child1", 
            "children": [ 
              { "name": "A1-level3-child1", "children": [] }, 
              { "name": "A1-level3-child2", "children": [] } 
            ] 
          } 
        ] 
      }, 
      { "name": "A2-level1-child1", "children": [] } 
    ] 
  }, 
  { "name": "B1", "children": [ ] } 
];

// 测试用例
console.log(findParentName("A1-level3-child1", obj)); // 输出: "A1-level2-child1"
console.log(findParentName("A2-level1-child1", obj)); // 输出: "A1"

函数逻辑解释

  • 我们从顶层节点开始遍历,对每个节点先检查它的直接子节点是否包含目标name:如果找到,直接返回当前节点的name(也就是父节点名称)。
  • 如果当前节点的直接子节点里没找到,就递归进入该节点的子节点层级,继续重复查找逻辑。
  • 如果整个嵌套结构遍历完都没找到目标值,函数会返回null,你可以根据需要改成其他默认值(比如undefined或者提示字符串)。

这个函数的优势是不管嵌套多少层都能处理,而且逻辑清晰,容易理解和修改——比如如果你的JSON结构字段名有变化(比如把name改成title),只需要修改代码里的字段名即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:06:18