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

如何从JavaScript嵌套对象数组中根据子节点获取其父节点?

嵌套JS对象数组中根据子节点查找父节点

我有一个嵌套结构的JavaScript对象数组(如下),需要找到{ name: 'Charge Type 1.2' }这个子节点对应的父节点。之前试过用hasChildNodes()方法,但完全没用——后来才反应过来这是DOM节点专属方法,根本不适用于普通JS对象。期望返回的父节点是指定的包含Charge Type 1的对象。

原嵌套对象数组

const table = [
    {
      name: 'A1 - John Doe', 
      icon: 'user-name',
      bold: true,
      code: 'NY',
      open: false,
      items: [
        {
          name: 'D3_AIR_ASBJHABSJAS',
          icon: 'package',
          open: false,
          items: [
            { 
              name: 'Charge Type 1',
              open: false,
              items: [
                { 
                  name: 'Charge Type 1.1',
                  icon: 'departure-nofill',
                  date: '12/10/2024'
                },
                { name: 'Charge Type 1.2'},
                { name: 'Charge Type 1.3'},
                { name: 'Charge Type 1.4',
                  items: [
                    { name: 'Charge Type 2.1'},
                    { name: 'Charge Type 2.2'},
                    { name: 'Charge Type 2.3'},
                  ]
                },
              ]
            },
            { 
              name: 'Charge Type 2',
              open: false,
              items: [
                { name: 'Charge Type 2.1'},
                { name: 'Charge Type 2.2'},
                { name: 'Charge Type 2.3',
                  items: [
                    { name: 'Charge Type 2.1.1'},
                  ]
                },
              ]
            },
            { 
              name: 'Charge Type 3',
              items: [
                { name: 'Charge Type 3.1'},
              ]
            },
          ]
        },
        {
          name: 'Hotel Beach Park',
          icon: 'departure-nofill',
          date: '12/10/2024'
        }

      ]
    },
    {name: '567', code: 'NYF',
      items: [
        { name: 'Charge Type 3.1'},
      ]
    },
  ];

期望返回的父节点

{ 
  name: 'Charge Type 1',
  open: false,
  items: [
    { 
      name: 'Charge Type 1.1',
      icon: 'departure-nofill',
      date: '12/10/2024'
    },
    { name: 'Charge Type 1.2'},
    { name: 'Charge Type 1.3'},
    { name: 'Charge Type 1.4',
      items: [
        { name: 'Charge Type 2.1'},
        { name: 'Charge Type 2.2'},
        { name: 'Charge Type 2.3'},
      ]
    },
  ]
}

解决方案:递归遍历查找

针对这种多层嵌套结构,用递归遍历的方式可以精准定位父节点:

function findParentNode(arr, targetName) {
  for (const node of arr) {
    // 检查当前节点是否包含子节点列表
    if (node.items && Array.isArray(node.items)) {
      // 验证当前节点的直接子节点是否匹配目标
      const hasTarget = node.items.some(child => child.name === targetName);
      if (hasTarget) {
        return node;
      }
      // 递归遍历子节点的下一层级
      const result = findParentNode(node.items, targetName);
      if (result) {
        return result;
      }
    }
  }
  // 未找到匹配的父节点时返回null
  return null;
}

// 调用示例
const targetParent = findParentNode(table, 'Charge Type 1.2');
console.log(targetParent);

这个函数会逐层遍历嵌套数组,一旦找到包含目标子节点的父节点就立即返回,完全适配这种多层嵌套的结构。如果需要更灵活的匹配规则(比如不是仅通过name匹配),可以把匹配逻辑改成传入回调函数,替换掉child.name === targetName这部分即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 06:00:15