树形结构已知子节点找父节点

已知 子节点 求父节点 

例如 已知 AAA

希望 得到 A-AA-AAA的格式


data3: [{


      id: 1,

      label: '一级 2',

      children: [{

        id: 3,

        label: '二级 2-1',

        children: [{

          id: 4,

          label: '三级 3-1-1'

        }, {

          id: 5,

          label: '三级 3-1-2',

          disabled: true

        }]

      }, {

        id: 2,

        label: '二级 2-2',

        disabled: true,

        children: [{

          id: 6,

          label: '三级 3-2-1'

        }, {

          id: 7,

          label: '三级 3-2-2',

          disabled: true

        }]

      }]

    }],


RISEBY
浏览 1836回答 4
4回答

肥皂起泡泡

let find = (array, label) =>{    let stack = [];    let going = true;        let walker = (array, label) => {        array.forEach(item => {            if (!going) return;            stack.push(item['label']);            if (item['label'] === label) {                going = false;            } else if (item['children']) {                walker(item['children'], label);            } else {                stack.pop();            }        });        if (going) stack.pop();    }    walker(array, label);    return stack.join('-');}console.log(find(data, '三级 3-2-2'))// 一级 2-二级 2-2-三级 3-2-2应该是 DFS

元芳怎么了

修改一下数据结构即可,添加一个父id属性{id:2,label:'xxx',children:[],parentId:1}

qq_遁去的一_1

目测lz遇到的问题是树形选择器,某个节点被选中后希望拿到该节点的层级信息,目前找到比较好的方案是拿到数据后遍历一遍,在每一个节点上生成一个levelInfo字段,标识当前层级信息。[{    projectid: 110000,    name: "一级 1",    levelInfo: "110000"    children: [{        projectid: 110100,        name: "二级 1-1",        levelInfo: "110000-110100"        children: [{            projectid: 110101,            name: "三级 1-1-1",            children: null,            levelInfo: "110000-110100-110101"        }, {            projectid: 110102,            name: "三级 1-1-2",            children: null,            levelInfo: "110000-110100-110102"        }]    }, {        projectid: 110200,        name: "二级 1-2",        levelInfo: "110000-110200"        children: [{            projectid: 110201,            name: "三级 1-2-1",            children: null,            levelInfo: "110000-110200-110201"        }, {            projectid: 110202,            name: "三级 1-2-2",            children: null,            levelInfo: "110000-110200-110202"        }]    }]}]// 生成该结构的函数,希望可以帮到你function formatTree(arr, levelInfo = '') {    return arr.map(item => {        const newParent = levelInfo ? levelInfo + '-' + item.projectid : '' + item.projectid;        const temp = {            ...item,            levelInfo: newParent        };        if (item.children) {            temp.children = formatTree(item.children, newParent);        }        return temp;    })}

米琪卡哇伊

const getParent = (data, target) => {  const get = (children, target, record = []) => (    children.reduce((result, { label, children: innerChildren }) => {      if (label === target) {        return [...record, target]      }      if (innerChildren) {        return [...result, ...get(innerChildren, target, [...record, label])]      }      return result    }, []))  return get(data, target).join('-')}// 一级 2-二级 2-1-三级 3-1-2const str = getParent(data, '三级 3-1-2')
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript