js根据某一层级的id输出从上到下整个层级的id

const array = [
  {
    id: 'A',
    name: 'A',
    children: [
      {
        id: 'A-1',
        name: 'A-1',
        children: [
          {
            id: 'A-1-1',
            name: 'A-1-1',
          },
          {
            id: 'A-1-2',
            name: 'A-1-2',
          },
          {
            id: 'A-1-3',
            name: 'A-1-3',
          },
        ]
      },
      {
        id: 'A-2',
        name: 'A-2',
        children: [
          {
            id: 'A-2-1',
            name: 'A-2-1',
          },
          {
            id: 'A-2-2',
            name: 'A-2-2',
          },
          {
            id: 'A-2-3',
            name: 'A-2-3',
          },
        ]
      },
      {
        id: 'A-3',
        name: 'A-3',
        children: [
          {
            id: 'A-3-1',
            name: 'A-3-1',
          },
          {
            id: 'A-3-2',
            name: 'A-3-2',
          },
          {
            id: 'A-3-3',
            name: 'A-3-3',
          },
        ]
      },
    ]
  },
  {
    id: 'B',
    name: 'B',
    children: [
      {
        id: 'B-1',
        name: 'B-1',
        children: [
          {
            id: 'B-1-1',
            name: 'B-1-1',
          },
          {
            id: 'B-1-2',
            name: 'B-1-2',
          },
          {
            id: 'B-1-3',
            name: 'B-1-3',
          },
        ]
      },
      {
        id: 'B-2',
        name: 'B-2',
        children: [
          {
            id: 'B-2-1',
            name: 'B-2-1',
          },
          {
            id: 'B-2-2',
            name: 'B-2-2',
          },
          {
            id: 'B-2-3',
            name: 'B-2-3',
          },
        ]
      },
      {
        id: 'B-3',
        name: 'B-3',
        children: [
          {
            id: 'B-3-1',
            name: 'B-3-1',
          },
          {
            id: 'B-3-2',
            name: 'B-3-2',
          },
          {
            id: 'B-3-3',
            name: 'B-3-3',
          },
        ]
      },
    ]
  },
  {
    id: 'C',
    name: 'C',
    children: [
      {
        id: 'C-1',
        name: 'C-1',
        children: [
          {
            id: 'C-1-1',
            name: 'C-1-1',
          },
          {
            id: 'C-1-2',
            name: 'C-1-2',
          },
          {
            id: 'C-1-3',
            name: 'C-1-3',
          },
        ]
      },
      {
        id: 'C-2',
        name: 'C-2',
        children: [
          {
            id: 'C-2-1',
            name: 'C-2-1',
          },
          {
            id: 'C-2-2',
            name: 'C-2-2',
          },
          {
            id: 'C-2-3',
            name: 'C-2-3',
          },
        ]
      },
      {
        id: 'C-3',
        name: 'C-3',
        children: [
          {
            id: 'C-3-1',
            name: 'C-3-1',
          },
          {
            id: 'C-3-2',
            name: 'C-3-2',
          },
          {
            id: 'C-3-3',
            name: 'C-3-3',
          },
        ]
      },
    ]
  }
]

function findPathByValue(tree, targetValue) {
  for (const node of tree) {
    if (node.id === targetValue) {
      return [node.id];
    }
    if(node.children) {
      const childPath = findPathByValue(node.children, targetValue);
      if (childPath) {
        return [node.id, ...childPath];
      }
    }
  }
  return undefined;
}

console.log(findPathByValue(array, 'A-3-3'))
// [ 'A', 'A-3', 'A-3-3' ]
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容