最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何用lodash重组对象数组?

运维笔记admin12浏览0评论

如何用lodash重组对象数组?

如何用lodash重组对象数组?

我的数据库收到以下响应:

[
  {
    "id": 1,
    "select": true,
    "insert": true,
    "update": true,
    "delete": false,
    "template": {
      "id": 1,
      "name": "Template 1"
    },
    "module": {
      "id": 1,
      "name": "Module 1"
    }
  }
  {
    "id": 2,
    "select": false,
    "insert": true,
    "update": true,
    "delete": false,
    "template": {
      "id": 1,
      "name": "Template 1"
    },
    "module": {
      "id": 2,
      "name": "Module 2"
    }
  }
  {
    "id": 3,
    "select": true,
    "insert": true,
    "update": false,
    "delete": false,
    "template": {
      "id": 2,
      "name": "Template 2"
    },
    "module": {
      "id": 1,
      "name": "Module 1"
    }
  }  

]

因此,我的root对象具有两个嵌套对象(templatemodule)及其各自的属性。

我想以template应该是root对象,应该具有modules属性和模块对象数组的方式转换我的数组。 Module对象应具有permissions属性,且其中包含select, insert, update, delete道具。如您所见,template对象已重复。我想避免结果数组中template对象重复,应该将它们合并。

所以结果应如下所示:

[
   {
      "id":1,
      "name":"Template 1",
      "modules":[
         {
            "id":1,
            "name":"Module 1",
            "permissions":{
               "select":true,
               "insert":true,
               "update":true,
               "delete":false
            }
         },
         {
            "id":2,
            "name":"Module 2",
            "permissions":{
               "select":false,
               "insert":true,
               "update":true,
               "delete":false
            }
         }
      ]
   },
   {
      "id":2,
      "name":"Template 2",
      "modules":[
         {
            "id":1,
            "name":"Module 1",
            "permissions":{
               "select":true,
               "insert":true,
               "update":false,
               "delete":false
            }
         }
      ]
   }
]

如何使用lodash实现这一目标?

回答如下:

这不是lodash,但我相信应该在没有外部依赖的情况下完成类似的简单操作。

const data = [
  {
    "id": 1,
    "select": true,
    "insert": true,
    "update": true,
    "delete": false,
    "template": {
      "id": 1,
      "name": "Template 1"
    },
    "module": {
      "id": 1,
      "name": "Module 1"
    },
  },
  {
    "id": 2,
    "select": false,
    "insert": true,
    "update": true,
    "delete": false,
    "template": {
      "id": 1,
      "name": "Template 1"
    },
    "module": {
      "id": 2,
      "name": "Module 2"
    },
  },
  {
    "id": 3,
    "select": true,
    "insert": true,
    "update": false,
    "delete": false,
    "template": {
      "id": 2,
      "name": "Template 2"
    },
    "module": {
      "id": 1,
      "name": "Module 1"
    },
  }, 
];

const reorgData = data => {
  return Object.values(
    data.reduce((newObj, { id, module, template, ...permissions }) => {
      if (!newObj[template.name]) {
        newObj[template.name] = template;
        newObj[template.name].modules = [];
      }
     
      newObj[template.name].modules.push({
        ...module,
        permissions,
      });
  
      return newObj;
    }, {})
  );
};

console.log(reorgData(data));

与本文相关的文章

发布评论

评论列表(0)

  1. 暂无评论