首页 > 解决方案 > 使用 lodash 对对象进行分组

问题描述

我有一个数组userList

[
  {email : 'abc@gmail.com',
  department : 'd1'},
  {email : 'abc@gmail.com',
  department : 'd2'},
  {email : 'dec@gmail.com',
  department : 'd1'},
]

我希望它是这样的:

[
  {
  email : 'abc@gmail.com',
  department : ['d1','d2']
  },
  {
  email : 'dec@gmail.com',
  department : ['d1']
  }
]

我使用以下方法实现了它:

const userGrp = _.groupBy(userList, 'email');
let data = [];
for (let key in userGrp) {
    if (userGrp.hasOwnProperty(key)) {
        const obj = {
            email: key,
            dept: extractDept(userGrp[key]),
        };
        data.push(obj);
    }
}

function extractDept(userObjList) {
  const arr = [];
  userObjList.forEach((element) => {
    arr.push(element.departmentName);
  });
  return arr;
}

我怎样才能使用它来实现它lodash

标签: javascriptlodash

解决方案


由于使用纯 js 很容易,这里是纯 js 的分组方式

const grouped = [...foo.reduce((a, {email, department}) =>
     a.set(email, (a.get(email) || []).concat(department))
, new Map)].map(([email, department]) => ({email, department}));

console.log(grouped)
<script>
const foo = [
    {email : 'abc@gmail.com',
        department : 'd1'},
    {email : 'abc@gmail.com',
        department : 'd2'},
    {email : 'dec@gmail.com',
        department : 'd1'},
];

</script>


推荐阅读