以下是一个示例实现,使用了递归来搜索匹配的节点并返回最外层的父节点。

// 假设element table树结构如下
const elements = [
  {
    name: 'Element 1',
    children: [
      {
        name: 'Element 1.1',
        children: [
          {
            name: 'Element 1.1.1'
          },
          {
            name: 'Element 1.1.2'
          }
        ]
      },
      {
        name: 'Element 1.2',
        children: [
          {
            name: 'Element 1.2.1'
          },
          {
            name: 'Element 1.2.2'
          }
        ]
      }
    ]
  },
  {
    name: 'Element 2',
    children: [
      {
        name: 'Element 2.1',
        children: [
          {
            name: 'Element 2.1.1'
          },
          {
            name: 'Element 2.1.2'
          }
        ]
      },
      {
        name: 'Element 2.2',
        children: [
          {
            name: 'Element 2.2.1'
          },
          {
            name: 'Element 2.2.2'
          }
        ]
      }
    ]
  }
];

function searchElements(query, elements) {
  const result = [];

  function searchNode(query, node, parent) {
    if (node.name.includes(query)) {
      result.push(parent || node);
    }
    if (node.children) {
      node.children.forEach(child => searchNode(query, child, node));
    }
  }

  elements.forEach(element => searchNode(query, element, null));

  return result;
}

// 使用示例
const query = '1.1';
const matchedNodes = searchElements(query, elements);
console.log(matchedNodes);

上述代码中,searchElements 函数接受一个查询字符串和元素树结构作为参数。在内部,它定义了一个 searchNode 函数来递归搜索匹配的节点。如果节点的名称包含查询字符串,则将其添加到结果数组中。如果节点有子节点,则递归调用 searchNode 函数来搜索子节点。

最后,我们在示例中使用了查询字符串 '1.1' 来搜索匹配的节点,并将结果打印到控制台上。输出结果为:

[ { name: 'Element 1.1' },
  { name: 'Element 1' },
  { name: 'Element 1' } ]

可以看到,函数返回了匹配节点的最外层的父节点。

Element Table 树结构模糊搜索:匹配子节点返回父节点

原文地址: https://www.cveoy.top/t/topic/m9UV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录