找回密码
 立即注册
搜索
0

从javascript对象中选择父节点

lacken 2024-7-29 13:58:21 75 显示全部楼层
[md]你有一个嵌套的数组结构,并且你想根据子节点的值找到其父节点。在 JavaScript 中,你可以递归地遍历这个数组来找到具有特定 `name` 属性的子节点,并接着获取其父节点。`hasChildNodes()` 是一个 DOM 方法,用于检查一个节点是否有子节点,它不适用于你的情况,因为你处理的是 JavaScript 对象数组,而不是 DOM 节点。

下面是一个可能的 `getParentElement` 函数实现,该函数递归地搜索具有指定 `name` 的对象,并返回其父对象:

```javascript
function getParentElement(items, childName) {
  let result = null;
  
  function search(items) {
    for (const item of items) {
      if (item.name === childName) {
        return item;
      }
      if (item.items) {
        const found = search(item.items);
        if (found) {
          if (!result) {
            result = {
              ...item,
              items: [found]
            };
          }
          return found;
        }
      }
    }
    return null;
  }
  
  const childItem = search(items);
  return result;
}

// 示例数据
var table = [
  // ... 你的数组数据
];

// 要搜索的子项名称
var itemName = 'Charge Type 1.2';

// 获取父元素
var parentElement = getParentElement(table, itemName);

console.log(parentElement);
```

这段代码定义了一个 `search` 函数,它是 `getParentElement` 函数内部的一个递归函数,用于在嵌套数组中查找具有指定 `name` 的项。一旦找到,它将返回该项,然后递归调用将返回到其父项,直到达到顶层。然后 `getParentElement` 函数返回找到的父项。

请注意,这个实现假设每个 `name` 是唯一的,或者至少在你搜索的上下文中是唯一的。如果有多个相同的 `name` 值,这个实现可能需要调整以处理这种情况。此外,返回的父项是一个新对象,包含了找到的子项和所有父属性,除了 `items` 属性,它只包含找到的子项链。如果你需要不同的行为,你可能需要调整代码以满足你的具体需求。
[/md]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册