如何在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
相关产品推荐
相关产品推荐

