Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用lodash重新组织对象数组?_Javascript_Node.js_Lodash - Fatal编程技术网

Javascript 如何使用lodash重新组织对象数组?

Javascript 如何使用lodash重新组织对象数组?,javascript,node.js,lodash,Javascript,Node.js,Lodash,我的db给了我以下回复: [ { "id": 1, "select": true, "insert": true, "update": true, "delete": false, "template": { "id": 1, "name": "Template 1" }, "module": { "id": 1, "name": "Module 1" } } {

我的db给了我以下回复:

[
  {
    "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
对象有两个嵌套对象(
template
module
)+它们自己的属性

我想以这样的方式转换我的数组:
template
应该是
root
对象,应该具有
modules
属性和modules对象数组<代码>模块对象应具有属性权限,其中包含
选择、插入、更新、删除
道具。如您所见,
模板
对象是重复的。我想避免结果数组中的
模板
对象重复,它们应该合并

所以结果应该是这样的:

[
   {
      "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数据=[
{
“id”:1,
“选择”:true,
“插入”:正确,
“更新”:正确,
“删除”:false,
“模板”:{
“id”:1,
“名称”:“模板1”
},
“模块”:{
“id”:1,
“名称”:“模块1”
},
},
{
“id”:2,
“选择”:false,
“插入”:正确,
“更新”:正确,
“删除”:false,
“模板”:{
“id”:1,
“名称”:“模板1”
},
“模块”:{
“id”:2,
“名称”:“模块2”
},
},
{
“id”:3,
“选择”:true,
“插入”:正确,
“更新”:false,
“删除”:false,
“模板”:{
“id”:2,
“名称”:“模板2”
},
“模块”:{
“id”:1,
“名称”:“模块1”
},
}, 
];
常量reorgData=数据=>{
返回Object.values(
reduce((newObj,{id,模块,模板,…权限})=>{
如果(!newObj[template.name]){
newObj[template.name]=模板;
newObj[template.name].modules=[];
}
newObj[template.name].modules.push({
…模块,
权限,
});
返回newObj;
}, {})
);
};

console.log(reorgData(数据))谢谢你的回答。我的框架经常使用lodash,是否有任何理由不使用它来做简单的事情,或者这只是您的偏好?主要是一种偏好,但这种偏好是基于lodash有点矮胖,现在有香草js来做lodash过去提供的事情。但是,如果您已经在项目中使用lodash,则可以通过直接导入所使用的特定lodash函数来帮助减轻其重量,尤其是在您的项目使用树抖动的情况下。