Javascript 如何使用lodash重新组织对象数组?
我的db给了我以下回复: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" } } {
[
{
"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函数来帮助减轻其重量,尤其是在您的项目使用树抖动的情况下。