Javascript lodash筛选对象数组并按分组以创建新数组

Javascript lodash筛选对象数组并按分组以创建新数组,javascript,dictionary,grouping,lodash,Javascript,Dictionary,Grouping,Lodash,下面是主数组,我想按部门名称分组,并将除“e-depid”之外的所有其他字段删除为单个数组 主阵列 [ { "id": "67", "empid": 5, "e-depid": "ab", "dept": { "name": "Prod" } }, {

下面是主数组,我想按部门名称分组,并将除“e-depid”之外的所有其他字段删除为单个数组

主阵列

  [
    {
      "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”。我在“?=”本地分配中遇到错误。当然,您可以使用或短路,我将进行编辑。