原文地址: How to groupBy in JavaScript
对数据进行分组是js
中一个基本用法, 所以我们没必要使用lodash
例如: 我们希望通过以下数组结构返回出一个类似下面示例的数据结构
const users = [
{ name: 'Jim', color: 'blue' },
{ name: 'Sam', color: 'blue' },
{ name: 'Eddie', color: 'green' },
];
const usersByColor = // TODO: 数组集合
console.log(usersByColor);
// 根据上面的 `users` 数据结构,我希望返回的数据是这个格式的:
// {
// blue: [{
// { name: 'Jim', color: 'blue' },
// { name: 'Sam', color: 'blue' },
// }],
// green: [{ name: 'Eddie', color: 'green' }]
// }
我门可以使用 js
中的 reduce
来做处理
const result = users.reduce((acc, value) => {
console.log('-----', acc,value)
return acc
},{})
我们先会使用{}
作为 acc
然后 在对 users
的每一个 item
做处理;
const usersByColor = users.reduce((acc, value) => {
if (!acc[value.color]) {
acc[value.color] = [];
}
// TODO: implement grouping
acc[value.color].push(value);
return acc;
}, {});
然后在每一循环中都查看对象中有没有 以 value.color
值为键名的元素,如果没有则新建且值为 []
;
如果已经有了的话则把整个对象赋值给 acc[value.color]