原文地址: How to groupBy in JavaScript
對數(shù)據(jù)進行分組是js
中一個基本用法俱病, 所以我們沒必要使用lodash
例如: 我們希望通過以下數(shù)組結(jié)構返回出一個類似下面示例的數(shù)據(jù)結(jié)構
const users = [
{ name: 'Jim', color: 'blue' },
{ name: 'Sam', color: 'blue' },
{ name: 'Eddie', color: 'green' },
];
const usersByColor = // TODO: 數(shù)組集合
console.log(usersByColor);
// 根據(jù)上面的 `users` 數(shù)據(jù)結(jié)構绊起,我希望返回的數(shù)據(jù)是這個格式的:
// {
// 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;
}, {});
然后在每一循環(huán)中都查看對象中有沒有 以 value.color
值為鍵名的元素样漆,如果沒有則新建且值為 []
;
如果已經(jīng)有了的話則把整個對象賦值給 acc[value.color]