原文地址: How to groupBy in JavaScript
對數(shù)據(jù)進行分組是js中一個基本用法, 所以我們沒必要使用lodash
例如: 我們希望通過以下數(shù)組結(jié)構(gòu)返回出一個類似下面示例的數(shù)據(jù)結(jié)構(gòu)
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é)構(gòu),我希望返回的數(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]