트 리 의 특정한 노드 의 key 에 따라 이 노드 가 있 는 경로 의 모든 노드 를 가 져 옵 니 다.

6842 단어 nodejs
//             ,           。
function getPathByKey(value, key, arr) {
    let temppath = [];
    try {
        function getNodePath(node){
          //        push   ,     node,    node    children
          temppath.push(node);
          //         ,  throw     
          if (node[key] === value) {
            throw ("GOT IT!");
          }
          if (node.children && node.children.length > 0) {
            for (var i = 0; i < node.children.length; i++) {
              getNodePath(node.children[i]);
            }

            //                ,          
            temppath.pop();
          }
          else {

            //       ,            
            temppath.pop();
          }
        }
        for (let i = 0; i < arr.length; i++) {
            getNodePath(arr[i]);
        }
    } catch (e) {
      return temppath;
    }
}

사례 백 엔 드 에서 들 려 오 는 트 리 구 조 를 사용 합 니 다. 전단 은 현재 가장 안쪽 에 있 는 id 값 에 따라 경 로 를 가 져 옵 니 다.
var tree = [
    {
        id: 5,
        name: "root",
        children: [{
            id: 51,
            name: "   ",
            children: [{
                id: 511,
                name: "   ",
                children: [{
                    id: 5111,
                    name: "xx   "
                }]
            }]
        }]
    },
    {
        id: 6,
        name: "root",
        children: [{
            id: 61,
            name: "   ",
            children: [{
                id: 611,
                name: "   ",
                children: [{
                    id: 6111,
                    name: "xx   "
                }]
            }]
        }]
    },
    {
        id: 7,
        name: "root",
        children: [{
            id: 71,
            name: "   ",
            children: [{
                id: 711,
                name: "   ",
                children: [{
                    id: 7111,
                    name: "xx   "
                }]
            }]
        }]
    }
]

function getPathByKey(value, key, arr) {
    let temppath = [];
    try {
        function getNodePath(node){
            temppath.push(node);
            //         ,  throw     
            if (node[key] === value) {
              throw ("GOT IT!");
            }
            if (node.children && node.children.length > 0) {
                for (var i = 0; i < node.children.length; i++) {
                    getNodePath(node.children[i]);
                }

              //                ,          
              temppath.pop();
            }
            else {

              //       ,            
              temppath.pop();
            }
        }
        for (let i = 0; i < arr.length; i++) {
            getNodePath(arr[i]);
        }
    } catch (e) {
        return temppath;
    }
}

let res = getPathByKey(6111, 'id', tree);
console.log(res);
$ node getNode.js
[ 
    { id: 6, name: 'root', children: [ [Object] ] },
    { id: 61, name: '   ', children: [ [Object] ] },
    { id: 611, name: '   ', children: [ [Object] ] },
    { id: 6111, name: 'xx   ' } 
]
<script src="https://code.csdn.net/snippets/37.js">script>

좋은 웹페이지 즐겨찾기