javascript - 使用 JSON 数组进行多级分组
问题描述
下面是我的 Json 数组:
var person = [ { name: 'Jim', color: 'blue', Office:'Microsoft', age: 22, }, { name: 'Sam', color: 'blue', Office:'Microsoft', age: 33, }, { name: 'Eddie', color: 'green', Office:'Dell', age: 77, }, ]
通过使用以下功能,我能够按功能获得单个组
var GroupByResults= person.reduce(function (r, a) {
r[a.color] = r[a.color] || [];
r[a.color].push(a);
return r;
}, Object.create(null));
我得到了以下输出
{ "blue": [ { "name": "Jim", "color": "blue", Office:'Microsoft', "age": 22 }, { "name": "Sam", "color": "blue", Office:'Microsoft', "age": 33 } ], "green": [ { "name": "Eddie", "color": "green", Office:'Dell', "age": 77 } ] }
我怎样才能实现多级分组?我想要另一个与 Office 的组,所以第一个与颜色组和下一个与办公室的组可以帮助我吗...
解决方案
您可以尝试为组构建创建一个函数,例如:
const data = [{ name: 'Jim', color: 'blue', Office:'Microsoft', age: 22, }, { name: 'Sam', color: 'blue', Office:'Microsoft', age: 33, }, { name: 'Eddie', color: 'green', Office:'Dell', age: 77, }]
function generateGroup(data, key) {
return data.reduce((r, a) => {
r[a[key]] = r[a[key]] || [];
r[a[key]].push(a);
return r;
}, {});
}
const KEYS = ['name', 'color', 'Office', 'age'];
const result = [];
for (const k of KEYS) {
result.push(generateGroup(data, k));
}
console.log(result);
推荐阅读
- ebay-api - 如何让 eBay 的 BulkMigrateListing() API 调用工作
- vba - 根据选择的单元格值自动过滤另一个工作表中的表格,其中自动过滤器需要“包含”
- javascript - [[call]] 和 [[construct]] 有什么区别?
- django - 如何在 django2.0.6 的通用删除视图中添加用户身份验证
- jquery - 使用包含,得到太多结果
- c# - 创建模型时无法使用上下文。但是我只有一个 dbcontext?
- azure - 在 Azure App Logics 中获取当前天气
- mysql - mariadb 在小子集上按慢速分组
- sql-server - SQL Server:在所有数据库上运行脚本
- html-email - 转发邮件时在邮件模板中使用 VML 的问题