{"id":8037,"date":"2020-04-30T15:14:45","date_gmt":"2020-04-30T07:14:45","guid":{"rendered":"https:\/\/sdeno.com\/?p=8037"},"modified":"2022-03-09T11:06:11","modified_gmt":"2022-03-09T03:06:11","slug":"js%e6%a0%b9%e6%8d%aeid%e9%80%92%e5%bd%92%e8%8e%b7%e5%8f%96%e8%8a%82%e7%82%b9","status":"publish","type":"post","link":"https:\/\/sdeno.com\/?p=8037","title":{"rendered":"js\u6839\u636eid\u9012\u5f52\u83b7\u53d6\u8282\u70b9"},"content":{"rendered":"<pre> var array = [\r\n     {\r\n         id: 1,\r\n         children:[{\r\n             id:2,\r\n             children:[]\r\n         }]\r\n     },\r\n\r\n     {\r\n         id:3,\r\n         children:[]\r\n     },\r\n\r\n     {\r\n         id:4,\r\n         children:[\r\n             {\r\n                 id:5,\r\n                 children:[\r\n                     {\r\n                         id:6,\r\n                         children:[],\r\n                         path:'aaa',\r\n                     },\r\n\r\n                     {\r\n                         id:7,\r\n                         path:'xxx',\r\n                         children:[\r\n                             {\r\n                                 id:187,\r\n                                 path:'zxxx',\r\n                             }\r\n                         ]\r\n                     }\r\n                 ]\r\n             }\r\n         ]\r\n     }\r\n ]\r\n\r\n\r\n\/\/<span style=\"color: #ff0000;\">\u6839\u636eid\u627e\u5230\u5bf9\u5e94\u7684\u6811\u8282\u70b9<\/span>\r\n var returnedItem\r\n var find = function(arr, id){\r\n\r\n     for(let i=0;i&lt;arr.length;i++){\r\n         if( arr[i].id==id ){\r\n             returnedItem = arr[i]\r\n             break\r\n         }else if(arr[i].children &amp;&amp; arr[i].children.length &gt; 0){\r\n             find(arr[i].children, id);  \/\/\u9012\u5f52\u8c03\u7528\r\n         }\r\n     }\r\n     return  returnedItem\r\n\r\n     \/\/ arr.forEach((item) =&gt; { \/\/\u5229\u7528foreach\u5faa\u73af\u904d\u5386\r\n     \/\/     if(item.id==id)\/\/\u5224\u65ad\u9012\u5f52\u7ed3\u675f\u6761\u4ef6\r\n     \/\/     {\r\n     \/\/         returnedItem = item;\r\n     \/\/         return item;\r\n     \/\/     }\r\n     \/\/     else if(item.children.length &gt; 0) \/\/\u5224\u65adchlidren\u662f\u5426\u6709\u6570\u636e\r\n     \/\/     {\r\n     \/\/         find(item.children, id);  \/\/\u9012\u5f52\u8c03\u7528\r\n     \/\/     }\r\n     \/\/ })\r\n }\r\n\r\n\/\/ var item = find(array, 187);\r\n console.log(find(array, 6))\r\n\r\n \/\/ \u83b7\u53d6\u5230\r\n \/\/ {\r\n \/\/     id:6,\r\n \/\/         children:[],\r\n \/\/     path:'aaa',\r\n \/\/ },<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre>\/\/<span style=\"color: #ff0000;\">\u627e\u5230\u6811\u4e2d\u6700\u5927\u7684id<\/span>\r\nvar tempid=0\r\nfunction findmaxValue(arr){\r\n\r\n    for(let i=0;i&lt;arr.length;i++){\r\n        if(arr[i].id&gt;tempid){\r\n            tempid=arr[i].id\r\n        }\r\n\r\n        if(arr[i].children &amp;&amp; arr[i].children.length &gt; 0){\r\n            findmaxValue(arr[i].children);\r\n        }else{\r\n            \/\/ break\r\n        }\r\n\r\n    }\r\n    return tempid\r\n}\r\n\r\nfindmaxValue(array)<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre><span style=\"color: #ff0000;\">\/\/\u6839\u636e\u5b50\u8282\u70b9\uff0c\u627e\u5230\u8be5\u5b50\u8282\u70b9\u6240\u6709\u7956\u7236\u7684id<\/span>\r\nfunction treeFindPath(tree,func,path=[]){\r\n    if(!tree)return[]\r\n    for(const data of tree){\r\n\r\n        \/\/\u8bb0\u5f97\u4fee\u6539\u8fd9\u91cc\uff0c\u4f60\u60f3\u8981\u7684\u5b57\u6bb5\r\n        path.push(data.id)\r\n        if(func(data)) return path\r\n        if(data.children){\r\n            const findChildren=treeFindPath(data.children,func,path)\r\n            if(findChildren.length)return findChildren\r\n        }\r\n        path.pop()\r\n    }\r\n\r\n\r\n    return[]\r\n}\r\n\r\nconsole.log(treeFindPath(array,data=&gt;data['id']===187))\r\n\/\/[4, 5, 7, 187]<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre>\/\/<span style=\"color: #ff0000;\">\u6839\u636e\u5b50\u8282\u70b9\uff0c\u5411\u4e0a\u627e\u5230\u8be5\u5b50\u8282\u70b9\u6574\u4e2a\u7956\u7236\u6811<\/span>\r\nfunction findson_parents(vdata,key,value){\r\n    function treeFindPath(tree,func,path=[]){\r\n        if(!tree)return[]\r\n        for(const data of tree){\r\n\r\n            \/\/\u8bb0\u5f97\u4fee\u6539\u8fd9\u91cc\uff0c\u4f60\u60f3\u8981\u7684\u5b57\u6bb5\r\n            path.push({\r\n                id:data.id,\r\n                path:data.path,\r\n                children:[]\r\n            })\r\n            if(func(data)) return path\r\n            if(data.children){\r\n                const findChildren=treeFindPath(data.children,func,path)\r\n                if(findChildren.length)return findChildren\r\n            }\r\n            path.pop()\r\n        }\r\n\r\n\r\n        return[]\r\n    }\r\n\r\n\r\n    var temarry=treeFindPath(vdata,data=&gt;data[key]===value)\r\n\r\n    for(let i=0;i&lt;temarry.length;i++){\r\n        if( temarry[i+1] ){\r\n            temarry[i].children.push(temarry[i+1])\r\n        }\r\n\r\n    }\r\n\r\n    return temarry[0]\r\n}\r\n\r\nconsole.log(  findson_parents(array,'id',187) )<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\">\u6784\u5efa\u6811<\/span><\/p>\n<figure class=\"mdx-lazyload-container\" style=\"max-width:420px\"><div style=\"padding-top:85%\"><\/div><div class=\"mdx-img-loading-sp mdui-valign\"><div><div class=\"mdui-spinner\"><\/div><\/div><\/div><img width=\"420\" height=\"357\" class=\"alignnone size-full wp-image-8375 lazyload\" title=\"js\u6839\u636eid\u9012\u5f52\u83b7\u53d6\u8282\u70b9\" src=\"data:image\/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" data-src=\"https:\/\/sdeno.com\/wp-content\/uploads\/2020\/04\/jstress1.jpg\" alt=\"https:\/\/sdeno.com\/wp-content\/uploads\/2020\/04\/jstress1.jpg\" data-srcset=\"https:\/\/sdeno.com\/wp-content\/uploads\/2020\/04\/jstress1.jpg 420w, https:\/\/sdeno.com\/wp-content\/uploads\/2020\/04\/jstress1-300x255.jpg 300w\" sizes=\"auto, (max-width: 420px) 100vw, 420px\"><\/figure>\n<pre>let source = [\r\n    {id:1,parentId:0,name:\"\u4e00\u7ea7\u83dc\u5355A\",rank:1},\r\n    {id:2,parentId:0,name:\"\u4e00\u7ea7\u83dc\u5355B\",rank:1},\r\n    {id:3,parentId:0,name:\"\u4e00\u7ea7\u83dc\u5355C\",rank:1},\r\n    {id:4,parentId:1,name:\"\u4e8c\u7ea7\u83dc\u5355A-A\",rank:2},\r\n    {id:5,parentId:1,name:\"\u4e8c\u7ea7\u83dc\u5355A-B\",rank:2},\r\n    {id:6,parentId:2,name:\"\u4e8c\u7ea7\u83dc\u5355B-A\",rank:2},\r\n    {id:7,parentId:4,name:\"\u4e09\u7ea7\u83dc\u5355A-A-A\",rank:3},\r\n    {id:8,parentId:7,name:\"\u56db\u7ea7\u83dc\u5355A-A-A-A\",rank:4},\r\n    {id:9,parentId:8,name:\"\u4e94\u7ea7\u83dc\u5355A-A-A-A-A\",rank:5},\r\n    {id:10,parentId:9,name:\"\u516d\u7ea7\u83dc\u5355A-A-A-A-A-A\",rank:6},\r\n    {id:11,parentId:10,name:\"\u4e03\u7ea7\u83dc\u5355A-A-A-A-A-A-A\",rank:7},\r\n    {id:12,parentId:11,name:\"\u516b\u7ea7\u83dc\u5355A-A-A-A-A-A-A-A\",rank:8},\r\n    {id:13,parentId:12,name:\"\u4e5d\u7ea7\u83dc\u5355A-A-A-A-A-A-A-A-A\",rank:9},\r\n    {id:14,parentId:13,name:\"\u5341\u7ea7\u83dc\u5355A-A-A-A-A-A-A-A-A-A\",rank:10},\r\n];\r\n\r\nfunction setTreeData(source){\r\n    let cloneData = JSON.parse(JSON.stringify(source))      \/\/ \u5bf9\u6e90\u6570\u636e\u6df1\u5ea6\u514b\u9686\r\n    return  cloneData.filter(father=&gt;{                      \/\/ \u5faa\u73af\u6240\u6709\u9879\uff0c\u5e76\u6dfb\u52a0children\u5c5e\u6027\r\n        let branchArr = cloneData.filter(child=&gt;father.id == child.parentId);       \/\/ \u8fd4\u56de\u6bcf\u4e00\u9879\u7684\u5b50\u7ea7\u6570\u7ec4\r\n        branchArr.length&gt;0 ? father.children=branchArr : ''   \/\/\u7ed9\u7236\u7ea7\u6dfb\u52a0\u4e00\u4e2achildren\u5c5e\u6027\uff0c\u5e76\u8d4b\u503c\r\n        return father.parentId==0;      \/\/\u8fd4\u56de\u7b2c\u4e00\u5c42\r\n    });\r\n}\r\nconsole.log(setTreeData(source),1111111)   \/\/ \u6811\u5f62\u6570\u636e\r\n\r\n\/* \u5c01\u88c5\u51fd\u6570 *\/\r\n\/* \u5b57\u6bb5\u540d\u4ee5\u5b57\u7b26\u4e32\u7684\u5f62\u5f0f\u4f20\u5165 *\/\r\nfunction treeData(source, id, parentId, children){\r\n    let cloneData = JSON.parse(JSON.stringify(source))\r\n    return cloneData.filter(father=&gt;{\r\n        let branchArr = cloneData.filter(child =&gt; father[id] == child[parentId]);\r\n        branchArr.length&gt;0 ? father[children] = branchArr : ''\r\n        return father[parentId] == 0\r\n    })\r\n}\r\n\/\/ \u8c03\u7528\r\nconsole.log(treeData(source,'id','parentId','children'),22222222222)<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<pre>\/\/\u6811\u8f6c\u5217\u8868\r\nlet tree = [\r\n    {\r\n        id: 1,\r\n        name: 'text1',\r\n        parentId: 1,\r\n        children: [\r\n            {\r\n                id: 2,\r\n                name: 'text2',\r\n                parentId: 1,\r\n                children: [\r\n                    {\r\n                        id: 4,\r\n                        name: 'text4',\r\n                        parentId: 2\r\n                    }\r\n                ]\r\n            },\r\n            {\r\n                id: 3,\r\n                name: 'text3',\r\n                parentId: 1\r\n            }\r\n        ]\r\n    }\r\n]\r\nfunction untieTree(tree, children_key='children') {\r\n    if(!!!tree || Object.prototype.toString.call(tree) !== '[object Array]' || tree.length&lt;=0) return [];\r\n    const temp = [];\r\n    tree.forEach(item =&gt; {\r\n        temp.push(item, ...untieTree(item[children_key], children_key))\r\n    });\r\n    return temp;\r\n}<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\">\/\/\u641c\u96c6\u6307\u5b9a\u5c42\u7ea7\u7684\u6240\u6709\u6570\u636e<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">var data5 = [{\r\n        i:'a1',\r\n        children: [{\r\n            i:'a2',\r\n            children: [{\r\n                i:'a3',\r\n            }, {\r\n                i:'a4',\r\n            }]\r\n        }, {\r\n            i:'a5',\r\n            children: [{\r\n                i:'a6',\r\n            }, {\r\n                i:'a7',\r\n            }]\r\n        }]\r\n    },\r\n        {\r\n            i:'a8',\r\n            children: [\r\n                {\r\n                    i:'a9',\r\n                },\r\n                {\r\n                    i:'a10',\r\n                }\r\n            ]\r\n        }\r\n    ];\r\n    var a1 = []\r\n    function dfs(list, level=1) {\r\n        list.forEach(item =&gt; {\r\n            item.level = level;\r\n            if(item.children) dfs(item.children, level+1)\r\n            if(item.level == 3){  \/\/\u641c\u96c6\u7b2c\u4e09\u7ea7 \u7684\u6240\u6709\u6570\u636e\r\n                var tem = JSON.parse(JSON.stringify(item))\r\n                delete tem.children\r\n                a1.push(tem)\r\n            }\r\n        })\r\n        return list;\r\n    }\r\n    dfs(data5)\r\n    console.log(a1)\r\n\r\n        [\r\n            {\r\n                \"i\": \"a3\",\r\n                \"level\": 3\r\n            },\r\n            {\r\n                \"i\": \"a4\",\r\n                \"level\": 3\r\n            },\r\n            {\r\n                \"i\": \"a6\",\r\n                \"level\": 3\r\n            },\r\n            {\r\n                \"i\": \"a7\",\r\n                \"level\": 3\r\n            }\r\n        ]<\/pre>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\">\/\/\u627e\u5230\u5f53\u524d\u5b50\u8282\u70b9\u7684\u5f53\u524d\u7236\u8282\u70b9<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">var arr0=\r\n        {\r\n\r\n            children:[\r\n                {\r\n                    \"children\": [\r\n                        {\r\n                            \"children\": [\r\n                                {\r\n                                    \"children\": [],\r\n                                    \"jgdm\": \"460202\",\r\n                                    \"jglx\": \"3\",\r\n                                    \"jgmc\": \"\u4e09\u4e9a\u533b\u9662\"\r\n                                },\r\n\r\n                            ],\r\n                            \"jgdm\": \"460201\",\r\n                            \"jglx\": \"2\",\r\n                            \"jgmc\": \"\u6d77\u68e0\u533a\"\r\n                        },\r\n\r\n                    ],\r\n                    \"jgdm\": \"460200\",\r\n                    \"jglx\": \"1\",\r\n                    \"jgmc\": \"\u4e09\u4e9a\u5e02\"\r\n                },\r\n\r\n            ]\r\n        }\r\n\r\n\r\n    function findParentNode(data, id,attrName) {\r\n        \/\/\u8bbe\u7f6e\u7ed3\u679c\r\n        let result;\r\n        if (!data) {\r\n            return;\/\/\u5982\u679cdata\u4f20\u7a7a\uff0c\u76f4\u63a5\u8fd4\u56de\r\n        }\r\n        for (var i = 0; i &lt; data.children.length; i++) {\r\n            let item = data.children[i];\r\n            if (item[attrName] == id) {\r\n                result = data;\r\n                return result; \/\/\u8fd9\u91cc\u662f\u5b9e\u9645\u8fd4\u56de\u7684\u503c\uff0c\u4f60\u53ef\u4ee5\u53ea\u8fd4\u56de\u5f53\u524d\u5bf9\u8c61\uff0c\u6216\u8005\u6307\u5b9a\u5f53\u524d\u5bf9\u8c61\u7684\u67d0\u4e2a\u5b57\u6bb5\u3002\r\n            } else if (item.children &amp;&amp; item.children.length &gt; 0) {\r\n                \/\/\u5982\u679c\u6709\u5b50\u96c6\uff0c\u5219\u628a\u5b50\u96c6\u4f5c\u4e3a\u53c2\u6570\u91cd\u65b0\u6267\u884c\u672c\u65b9\u6cd5\r\n                result = findParentNode(item, id,attrName);\r\n                \/\/\u5173\u952e\uff0c\u5343\u4e07\u4e0d\u8981\u76f4\u63a5return\u672c\u65b9\u6cd5\uff0c\u4e0d\u7136\u5373\u4f7f\u6ca1\u6709\u8fd4\u56de\u503c\u4e5f\u4f1a\u5c06\u8fd4\u56dereturn\uff0c\u5bfc\u81f4\u6700\u5916\u5c42\u5faa\u73af\u4e2d\u65ad\uff0c\u76f4\u63a5\u8fd4\u56deundefined,\u8981\u6709\u8fd4\u56de\u503c\u624dreturn\u624d\u5bf9\r\n                if (result) {\r\n                    return result;\r\n                }\r\n            }\r\n        }\r\n        \/\/\u5982\u679c\u6267\u884c\u5faa\u73af\u4e2d\u90fd\u6ca1\u6709return\uff0c\u5219\u5728\u6b64return\r\n        return result;\r\n    }\r\n\r\n\r\n    var nodeEl = findParentNode(arr0, 460202,'jgdm');  \/\/\u627e\u5230{\"jgdm\":460202}\u5f53\u524d\u8282\u70b9\u7684\u7236\u8282\u70b9\r\n    console.log(nodeEl)<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p><span style=\"color: #ff0000;\">\/\/\u6811\u4e00\u5171\u6709\u591a\u5c11\u5c42\u7ea7\uff0c\u5e76\u8fd4\u56de\u6700\u5148\u627e\u5230\u6700\u5c0f\u7684\u8282\u70b9<\/span><\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">function getMaxFloor (treeData) {\r\n     let max = 0\r\n     let childrenObj = null\r\n     function each (data, floor) {\r\n         data.forEach(e =&gt; {\r\n             \/\/ e.floor = floor \/\/\u987a\u4fbf\u9644\u52a0\u5c42\u7ea7\r\n             if (floor &gt; max) {\r\n                 max = floor\r\n                 childrenObj = e\r\n             }\r\n\r\n             if (e.children &amp;&amp; e.children.length &gt; 0) {\r\n                 each(e.children, floor + 1)\r\n             }\r\n         })\r\n     }\r\n     each(treeData,1)\r\n     return {max,childrenObj}\r\n }\r\n\r\n const treeData = [\r\n     {\r\n         title: 'parent 1',\r\n         key: '0-0',\r\n         children: [\r\n             {\r\n                 title: 'parent 1-0',\r\n                 key: '0-0-0',\r\n                 disabled: true,\r\n                 children: [\r\n                     {\r\n                         title: 'leaf2222',\r\n                         key: '0-0-0-0',\r\n                         disableCheckbox: true,\r\n                         children: [\r\n                             {\r\n                                 title: 'lea666',\r\n                                 key: '0-0-0-5',\r\n                                 disableCheckbox: true,\r\n                                 children: [\r\n                                     {\r\n                                         title: 'lea6776',\r\n                                         key: '0-0-0-5',\r\n                                         disableCheckbox: true,\r\n                                     },\r\n                                 ],\r\n                             },\r\n                         ],\r\n                     },\r\n                 ],\r\n             }\r\n         ],\r\n     }\r\n ];\r\n\r\n \/\/\u8c03\u7528\u4ee5\u4e0a\u5c01\u88c5\u597d\u7684\u65b9\u6cd5\r\n const maxNum = getMaxFloor(treeData)\r\n console.log(maxNum)<\/pre>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>var array = [ { id: 1, children:[{ id:2, children:[] }] [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[53],"tags":[],"class_list":["post-8037","post","type-post","status-publish","format-standard","hentry","category-53"],"_links":{"self":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/posts\/8037","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=8037"}],"version-history":[{"count":0,"href":"https:\/\/sdeno.com\/index.php?rest_route=\/wp\/v2\/posts\/8037\/revisions"}],"wp:attachment":[{"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=8037"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=8037"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/sdeno.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=8037"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}