繁体   English   中英

从树型 object 数组 Javascript 中获取所有子记录

[英]Get All The Child Record from a tree type object array Javascript

我有一个 JSON 数据,如下所示

var data =
[
   {
      "id":1,
      "parentId":0
   },
   {
      "id":2,
      "parentId":1
   },
   {
      "id":3,
      "parentId":1
   },
   {
      "id":4,
      "parentId":2
   },
   {
      "id":5,
      "parentId":4
   },
   {
      "id":6,
      "parentId":3
   },
   {
      "id":7,
      "parentId":6
   },
   {
      "id":8,
      "parentId":7
   }
]

现在我想得到 id=2 或 3 的所有孩子

例如:id 2 的孩子是:(4,5) 对于 3:id 2 的孩子是:(6,7,8)

我怎样才能得到所有的孩子记录

我尝试使用 for 循环,但以下失败是我的工作

这里 ArrFolderTree = 数据;

            let parentId = [];
            let arrAdminFolder = [];
            for (let i = ArrFolderTree.length - 1; i > 0; i--) {
                let ind = 0;
                while (ind < ArrFolderTree.length) {
                    for (let o = 0; o < ArrAllFolders.length; o++) {
                        if (ArrAllFolders[o].FolderId == ArrFolderTree[ind].Id) {
                            parentId.push(ArrFolderTree[ind].Id);
                            arrAdminFolder.push(ArrFolderTree[ind].Id);
                        }
                        let currentParentId = 0;
                        for (let ab = 0; ab < parentId.length; ab++) {
                            if (parentId[ab] == ArrAllFolders[o].FolderId) {
                                currentParentId = ArrFolderTree[ind].Id;
                                arrAdminFolder.push(ArrFolderTree[ind].Id);
                            }
                        }
                        if (currentParentId > 0)
                            parentId.push(currentParentId);
                    }
                    ind++;
                }
            }

上面的循环是错误的,但我想知道如何在这里使用循环

您可以采用 object ,其中所有节点均按其parentId排序,然后采用id通过递归查找子节点和嵌套子节点。

 const getChildren = id => (relations[id] || []).flatMap(o => [o, ...getChildren(o.id)]), data = [{ id: 1, parentId: 0 }, { id: 2, parentId: 1 }, { id: 3, parentId: 1 }, { id: 4, parentId: 2 }, { id: 5, parentId: 4 }, { id: 6, parentId: 3 }, { id: 7, parentId: 6 }, { id: 8, parentId: 7 }], relations = data.reduce((r, o) => { (r[o.parentId]??= []).push(o); return r; }, {}); console.log(getChildren(2)); // 4 5 console.log(getChildren(3)); // 6 7 8
 .as-console-wrapper { max-height: 100%;important: top; 0; }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM