在JavaScript中将树从DB格式转换为JSON格式

假设我们有一个像这样的对象数组-

const arr = [

   {"id":7,"name":"Kuwait","parentId":2},

   {"id":4,"name":"Iraq","parentId":2},

    {"id":10,"name":"Qatar","parentId":2},

   {"id":2,"name":"Middle East","parentId":1},

   {"id":3,"name":"Bahrain","parentId":2},

   {"id":6,"name":"Jordan","parentId":2},

   {"id":8,"name":"Lebanon","parentId":2},

   {"id":1,"name":"Africa/Middle East","parentId":null},       {"id":5,"name":"Israel","parentId":2},

    {"id":9,"name":"Oman","parentId":2}

];

我们需要编写一个包含一个这样的数组的JavaScript函数。然后,该函数应准备一个新数组,其中包含根据其父对象分组的对象。

因此,输出应如下所示:

const output = [

   {"id":55,"text":"Africa/Middle East","children":[

   {"id":2,"text":"Middle East","children":

   [{"id":7,"name":"Kuwait","children":[]},

   {"id":4,"name":"Iraq","children":[]},

   {"id":10,"name":"Qatar","children":[]},

   {"id":3,"name":"Bahrain","children":[]},

   {"id":6,"name":"Jordan","children":[]},

   {"id":8,"name":"Lebanon","children":[]},

   {"id":5,"name":"Israel","children":[]},

   {"id":9,"name":"Oman","children":[]}]}

];

示例

const arr = [

   {"id":7,"name":"Kuwait","parentId":2},

    {"id":4,"name":"Iraq","parentId":2},

    {"id":10,"name":"Qatar","parentId":2},

   {"id":2,"name":"Middle East","parentId":1},

    {"id":3,"name":"Bahrain","parentId":2},

    {"id":6,"name":"Jordan","parentId":2},

   {"id":8,"name":"Lebanon","parentId":2},

    {"id":1,"name":"Africa/Middle East","parentId":null},    {"id":5,"name":"Israel","parentId":2},

    {"id":9,"name":"Oman","parentId":2} ];

const transformTree = (data, root = null) => {

   const res = [];

   const map = {};

   data.forEach((el) => {

      el.children = map[el.id] && map[el.id].children || [];

      map[el.id] = el; if (el.parentId === root) {

          res.push(el);

      }

      else {

         map[el.parentId] = map[el.parentId] || {};

         map[el.parentId].children = map[el.parentId].children || [];                map[el.parentId].children.push(el);

      };

   });

   return res;

};

console.log(JSON.stringify(transformTree(arr), undefined, 4));

输出结果

控制台中的输出将是-

[

   { "id": 1,

      "name": "Africa/Middle East",

      "parentId": null,

      "children": [

      {

         "id": 2,

         "name": "Middle East",

         "parentId": 1,

         "children": [

            {

               "id": 7,

               "name": "Kuwait",

               "parentId": 2,

               "children": []

            },

            {

               "id": 4,

               "name": "Iraq",

               "parentId": 2,

            "children": []

         },

         {

            "id": 10,

            "name": "Qatar",

            "parentId": 2,

            "children": []

      }, {

            "id": 3,

            "name": "Bahrain",

            "parentId": 2,

            "children": []

            },

            {

               "id": 6,

               "name": "Jordan",

               "parentId": 2,

               "children": []

            }, {

                  "id": 8,

                  "name": "Lebanon",

                  "parentId": 2,

                  "children": []

            }, {

                  "id": 5,

                  "name": "Israel",

                  "parentId": 2,

                  "children": []

               }, {

                     "id": 9,

                     "name": "Oman",

                     "parentId": 2,

                     "children": []

               }

            ]

         }

      ]

   }

]

以上是 在JavaScript中将树从DB格式转换为JSON格式 的全部内容, 来源链接: utcz.com/z/340768.html

回到顶部