zoukankan      html  css  js  c++  java
  • 查找树状结构父级关系

    var arr = [
      { id: 1, parentId: 0, name: '四川' },
      { id: 2, parentId: 0, name: '贵州' },
      { id: 3, parentId: 0, name: '云南' },
      { id: 4, parentId: 0, name: '江苏' },
    
      { id: 5, parentId: 1, name: '成都' },
      { id: 6, parentId: 2, name: '贵州' },
      { id: 7, parentId: 3, name: '昆明' },
      { id: 8, parentId: 4, name: '苏州' },
    
      { id: 9, parentId: 5, name: '成都县1' },
      { id: 10, parentId: 5, name: '成都县2' },
      { id: 11, parentId: 5, name: '成都县3' },
      { id: 12, parentId: 5, name: '成都县4' },
      { id: 13, parentId: 5, name: '成都县5' },
    
      { id: 14, parentId: 6, name: '贵州县1' },
      { id: 15, parentId: 6, name: '贵州县2' },
      { id: 16, parentId: 6, name: '贵州县3' },
    
      { id: 17, parentId: 7, name: '昆明县1' },
      { id: 18, parentId: 7, name: '昆明县2' },
      { id: 19, parentId: 7, name: '昆明县3' },
    
      { id: 20, parentId: 8, name: '苏州县1' },
      { id: 21, parentId: 8, name: '苏州县2' },
      { id: 22, parentId: 8, name: '苏州县3' },
      { id: 23, parentId: 8, name: '苏州县4' },
    
      { id: 24, parentId: 9, name: '成都镇1' },
      { id: 25, parentId: 10, name: '成都镇2' },
    
      { id: 26, parentId: 24, name: '成都村11' },
      { id: 27, parentId: 24, name: '成都村12' },
      { id: 28, parentId: 24, name: '成都村13' }
    ]
    
    function main(arr, pid = 0, level = 0) {
      var temp = [];
      for (var item of arr) {
        if (item.parentId === pid) {
          // item.level = level + 1;
          item.children = main(arr, item.id, item.level);
          temp.push(item);
        }
      }
      return temp;
    }
    var res = main(arr, pid = 0);
    console.log(JSON.stringify(res))
    // for (var item of res) {
    //   var result = findId(item, 28)
    //   console.log('res', result)
    // }
    
    function findId(item, id) {
      var isFind = false;
      if (Array.isArray(item)) {
        for (var tree of item) {
          if (tree.id == id) {
            isFind = true;
            var result = Object.assign({}, tree);
            delete result.children;
            return result;
          } else {
            if (tree.children.length > 0) {
              return findId(tree.children, id);
            }
          }
        }
        if (!isFind) return 'not exists';
      } else {
        if (item.id == id) {
          var result = Object.assign({}, item);
          delete result.children;
          return result;
        } else {
          return findId(item.children, id);
        }
      }
    }
    
    
    
    var data = findParentInTree(res, '28', '3', 'id', 'parentId')
    console.log('data', data)
    
    function findParentInTree(trees, id, zIndex, indexId, parentId) {
      var ids = [];
      var pids = [];
    
      function findId(trees, id) {
        trees.map(tree => {
          if (tree[indexId] == id) {
            var result = Object.assign({}, tree);
            delete result.children;
            ids.push(result)
            return result;
          } else {
            if (tree.children.length > 0) {
              return findId(tree.children, id);
            }
          }
        })
      }
    
      function findPid(trees, idInfo) {
        var pid = idInfo[parentId];
        trees.map(tree => {
          if (tree[indexId] == pid) {
            var result = Object.assign({}, tree);
            delete result.children;
            pids.push(result)
            return result;
          } else {
            if (tree.children.length > 0) {
              return findPid(tree.children, idInfo);
            }
          }
        })
      }
      findId(res, id);
      if (ids.length !== 1) {
        return {};
      }
      if (zIndex == 0) {
        return ids[0];
      } else if (zIndex < 0) {
        return {};
      } else {
        for (var k = 1; k <= zIndex; k++) {
          var Info = Object.assign({}, k == 1 ? ids[0] : pids[0]);
          ids = [];
          pids = [];
          findPid(trees, Info);
        }
        if (pids.length !== 1) {
          return {};
        }
        return pids[0]
      }
    }
    

      结果

    [{
    	"id": 1,
    	"parentId": 0,
    	"name": "四川",
    	"children": [{
    		"id": 5,
    		"parentId": 1,
    		"name": "成都",
    		"children": [{
    			"id": 9,
    			"parentId": 5,
    			"name": "成都县1",
    			"children": [{
    				"id": 24,
    				"parentId": 9,
    				"name": "成都镇1",
    				"children": [{
    					"id": 26,
    					"parentId": 24,
    					"name": "成都村11",
    					"children": []
    				}, {
    					"id": 27,
    					"parentId": 24,
    					"name": "成都村12",
    					"children": []
    				}, {
    					"id": 28,
    					"parentId": 24,
    					"name": "成都村13",
    					"children": []
    				}]
    			}]
    		}, {
    			"id": 10,
    			"parentId": 5,
    			"name": "成都县2",
    			"children": [{
    				"id": 25,
    				"parentId": 10,
    				"name": "成都镇2",
    				"children": []
    			}]
    		}, {
    			"id": 11,
    			"parentId": 5,
    			"name": "成都县3",
    			"children": []
    		}, {
    			"id": 12,
    			"parentId": 5,
    			"name": "成都县4",
    			"children": []
    		}, {
    			"id": 13,
    			"parentId": 5,
    			"name": "成都县5",
    			"children": []
    		}]
    	}]
    }, {
    	"id": 2,
    	"parentId": 0,
    	"name": "贵州",
    	"children": [{
    		"id": 6,
    		"parentId": 2,
    		"name": "贵州",
    		"children": [{
    			"id": 14,
    			"parentId": 6,
    			"name": "贵州县1",
    			"children": []
    		}, {
    			"id": 15,
    			"parentId": 6,
    			"name": "贵州县2",
    			"children": []
    		}, {
    			"id": 16,
    			"parentId": 6,
    			"name": "贵州县3",
    			"children": []
    		}]
    	}]
    }, {
    	"id": 3,
    	"parentId": 0,
    	"name": "云南",
    	"children": [{
    		"id": 7,
    		"parentId": 3,
    		"name": "昆明",
    		"children": [{
    			"id": 17,
    			"parentId": 7,
    			"name": "昆明县1",
    			"children": []
    		}, {
    			"id": 18,
    			"parentId": 7,
    			"name": "昆明县2",
    			"children": []
    		}, {
    			"id": 19,
    			"parentId": 7,
    			"name": "昆明县3",
    			"children": []
    		}]
    	}]
    }, {
    	"id": 4,
    	"parentId": 0,
    	"name": "江苏",
    	"children": [{
    		"id": 8,
    		"parentId": 4,
    		"name": "苏州",
    		"children": [{
    			"id": 20,
    			"parentId": 8,
    			"name": "苏州县1",
    			"children": []
    		}, {
    			"id": 21,
    			"parentId": 8,
    			"name": "苏州县2",
    			"children": []
    		}, {
    			"id": 22,
    			"parentId": 8,
    			"name": "苏州县3",
    			"children": []
    		}, {
    			"id": 23,
    			"parentId": 8,
    			"name": "苏州县4",
    			"children": []
    		}]
    	}]
    }]
    

      

    { id: 5, parentId: 1, name: '成都' }
    

      

      

  • 相关阅读:
    flutter项目目录介绍
    flutter真机调试出现flutter Launching 'app' on No Devices.
    flutter run出现 Deprecated Gradle features were used in this build, making it incompatible with Gradle 7.0.
    小程序uni-app中uview中select选择器第二次无法选中设置的默认值
    android studio编译flutter项目
    如何解决:Android Studio (version 4.1); Flutter plugin not installed and Dart plugin not installed errors
    CF Round 87
    CF #643(div.2)
    CF #642(div.3)
    CF #638(div.2)
  • 原文地址:https://www.cnblogs.com/xiaosongJiang/p/10078489.html
Copyright © 2011-2022 走看看