Javascript lodash筛选对象数组并按分组以创建新数组
下面是主数组,我想按部门名称分组,并将除“e-depid”之外的所有其他字段删除为单个数组 主阵列Javascript lodash筛选对象数组并按分组以创建新数组,javascript,dictionary,grouping,lodash,Javascript,Dictionary,Grouping,Lodash,下面是主数组,我想按部门名称分组,并将除“e-depid”之外的所有其他字段删除为单个数组 主阵列 [ { "id": "67", "empid": 5, "e-depid": "ab", "dept": { "name": "Prod" } }, {
[
{
"id": "67",
"empid": 5,
"e-depid": "ab",
"dept": { "name": "Prod" }
},
{
"id": "67",
"empid": 7,
"e-depid": "ac",
"dept": { "name": "Prod" }
},
{
"id": "67",
"empid": 5,
"e-depid": "ad",
"dept": { "name": "mkt" }
}
]
结果数组
[
{
"Prod": { "e-depid": ["ab", "ac"] },
"mkt": { "e-depid": ["ad"] }
}
]
你可以采取行动来获得想要的结果
如有必要,将对象包裹在数组中
const
数据=[{id:“67”,empid:5,“e-depid:“ab”,部门:{name:“Prod”},{id:“67”,empid:7,“e-depid:“ac”,部门:{name:“Prod”},{id:“67”,empid:5,“e-depid:“ad”,部门:{name:“mkt}],
结果=(数据)
.groupBy(o=>o.dept.name)
.transform((o,a,k)=>(o[k]??={})['e-depid']=a.map(o=>o['e-depid']))
.value();
控制台日志(结果)代码>
。作为控制台包装{最大高度:100%!重要;顶部:0;}
只需一个简单的调用就可以非常简洁
const
输入=[{“id”:“67”,“empid”:5,“e-depid”:“ab”,“部门”:{“名称”:“Prod”},{“id”:“67”,“empid”:7,“e-depid”:“ac”,“部门”:{“名称”:“Prod”},{“id”:“67”,“empid”:5,“e-depid”:“ad”,“部门”:{“名称”:“mkt}],
结果=输入.reduce((a,{dept:{name},'e-depid':e})=>(
(a[name]| |(a[name]={'e-depid':[]}])['e-depid']]
), {});
控制台日志(结果)代码>
.as控制台包装{max height:100%!important;top:0;}
为什么需要数组作为结果?你试过什么?什么不起作用?我试着让deptype=uu.groupBy(mainArry.map((types)=>uu.pick(types,['dept.name','e-depid']),'dept.name');这将返回分组数组。请您为此建议一个替代方法“(a[name]??={'e-depid':[]})['e-depid']]。推(e),a”。我在“?=”本地分配中遇到错误。当然,您可以使用或短路,我将进行编辑。