繁体   English   中英

如何从父子 json 数据中搜索带有 id 的节点值

[英]how to search the node value with id from a parent-child json data

我有一个基于父子 json 的数据

[
   {
      "_id":"624015bb69f627d1d3484b06",
      "name":"11111",
      "created":"2022-03-27T07:36:50.492Z",
      "children":[
         {
            "_id":"624015c369f627d1d3484b0b",
            "name":"222222",
            "created":"2022-03-27T07:36:50.492Z",
            "children":[
               
            ],
            "parent":"624015bb69f627d1d3484b06",
            "path":"624015bb69f627d1d3484b06,624015c369f627d1d3484b0b",
            "__v":0
         },
         {
            "_id":"624015d069f627d1d3484b10",
            "name":"333333",
            "created":"2022-03-27T07:36:50.492Z",
            "children":[
               {
                  "_id":"6240161269f627d1d3484b15",
                  "name":"444444",
                  "created":"2022-03-27T07:36:50.492Z",
                  "children":[
                     {
                        "_id":"624021be69f627d1d3484b1f",
                        "name":"5555555",
                        "created":"2022-03-27T07:36:50.492Z",
                        "children":[
                           {
                              "_id":"624021cc69f627d1d3484b24",
                              "name":"555551111",
                              "created":"2022-03-27T07:36:50.492Z",
                              "children":[
                                 
                              ],
                              "parent":"624021be69f627d1d3484b1f",
                              "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10,6240161269f627d1d3484b15,624021be69f627d1d3484b1f,624021cc69f627d1d3484b24",
                              "__v":0
                           },
                           {
                              "_id":"624021d569f627d1d3484b29",
                              "name":"555552222",
                              "created":"2022-03-27T07:36:50.492Z",
                              "children":[
                                 
                              ],
                              "parent":"624021be69f627d1d3484b1f",
                              "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10,6240161269f627d1d3484b15,624021be69f627d1d3484b1f,624021d569f627d1d3484b29",
                              "__v":0
                           },
                           {
                              "_id":"624021de69f627d1d3484b2e",
                              "name":"555553333",
                              "created":"2022-03-27T07:36:50.492Z",
                              "children":[
                                 
                              ],
                              "parent":"624021be69f627d1d3484b1f",
                              "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10,6240161269f627d1d3484b15,624021be69f627d1d3484b1f,624021de69f627d1d3484b2e",
                              "__v":0
                           },
                           {
                              "_id":"624021eb69f627d1d3484b33",
                              "name":"555554444",
                              "created":"2022-03-27T07:36:50.492Z",
                              "children":[
                                 
                              ],
                              "parent":"624021be69f627d1d3484b1f",
                              "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10,6240161269f627d1d3484b15,624021be69f627d1d3484b1f,624021eb69f627d1d3484b33",
                              "__v":0
                           },
                           {
                              "_id":"624021f469f627d1d3484b38",
                              "name":"555555555",
                              "created":"2022-03-27T07:36:50.492Z",
                              "children":[
                                 
                              ],
                              "parent":"624021be69f627d1d3484b1f",
                              "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10,6240161269f627d1d3484b15,624021be69f627d1d3484b1f,624021f469f627d1d3484b38",
                              "__v":0
                           }
                        ],
                        "parent":"6240161269f627d1d3484b15",
                        "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10,6240161269f627d1d3484b15,624021be69f627d1d3484b1f",
                        "__v":0
                     }
                  ],
                  "parent":"624015d069f627d1d3484b10",
                  "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10,6240161269f627d1d3484b15",
                  "__v":0
               }
            ],
            "parent":"624015bb69f627d1d3484b06",
            "path":"624015bb69f627d1d3484b06,624015d069f627d1d3484b10",
            "__v":0
         }
      ],
      "parent":null,
      "path":"624015bb69f627d1d3484b06",
      "__v":0
   }
]

我想通过搜索它的_id值来搜索结束叶节点,例如我想找到id为'624021f469f627d1d3484b38'的叶节点,它应该是output名称为'55555555'的整个节点值,

我尝试了以下方法。

const find = (array, id) => {
    var result;
    array.some(o => result = o._id === id ? o : find(o.children || [], id));
    return result;
};


const findChildById = (arr, id) => {
  const result = arr.find(o => o._id === id)
  if (result) return result
  for (const cm of arr) {
    const result = cm.children.find(o => o._id === id)
    if (result) return result
  }
}

      let node = find( nodeData, '624021f469f627d1d3484b38');
      let node =  findChildById( nodeData, '624021f469f627d1d3484b38');

但两种方法 output 未定义,

const findChildren = (arrElement, matchingID) => {
  if (arrElement._id === matchingID) {
    return arrElement;
  } else if (arrElement.children.length) {
    let children = null;
    arrElement.children.forEach(element => {
      children = findChildren(element, matchingID);
    });
    return children;
  }
  return null;
};

console.log(findChildren(arrayChildren[0], '624021f469f627d1d3484b38'));

暂无
暂无

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

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