javascript - 使用 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
?
解决方案
由于使用纯 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>