javascript - 基于javascript中的多个键对数据进行分组
问题描述
收到 JSON 响应
[{
"name": "A1",
"date": "2019-03-13",
"comment": "xyz"
},
{
"name": "A1",
"date": "2019-03-13",
"comment": "abc"
},
{
"name": "B1",
"date": "2019-03-13",
"comment": "pqr"
},
{
"name": "A1",
"date": "2019-03-14",
"comment": "mno"
}
]
预期产出
[
{
"name": "A1",
"date": "2019-03-13",
"data": [
{
"name": "A1",
"date": "2019-03-13",
"comment": "xyz"
},
{
"name": "A1",
"date": "2019-03-13",
"comment": "abc"
}
],
{
"name": "A1",
"date": "2019-03-14",
"data": [
{
"name": "A1",
"date": "2019-03-14",
"comment": "mno"
}
]
},
{
"name": "B1",
"date": "2019-03-13",
"data": [
{
"name": "B1",
"date": "2019-03-13",
"comment": "pqr"
}
]
}
]
我想创建包含唯一名称和日期及其各自数据的新 javascript 数组。
有人可以在这里帮助我吗?
解决方案
您可以根据对象累加器中的&array#reduce
对日期进行分组,然后使用.name
date
Object.values()
let data = [{ "name": "A1", "date": "2019-03-13", "comment": "xyz" }, { "name": "A1", "date": "2019-03-13", "comment": "abc" }, { "name": "B1", "date": "2019-03-13", "comment": "pqr" }, { "name": "A1", "date": "2019-03-14", "comment": "mno" } ],
result = Object.values(data.reduce((r,{name,date, comment}) => {
r[name + "_" + date] = r[name + "_" + date] || {name, date, data: []};
r[name + "_" + date].data.push({name,date,comment});
return r;
},{}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- php - MySQL 和 MSSQL 中用于 IF INSERT ELSE UPDATE 的通用语法
- node.js - 试图填充父对象的数组,但这样做有困难
- spring-boot - 覆盖 thymeleaf templateEngine 配置在 Spring Boot 2.1.8 中停止工作
- reactjs - 在 Meteor.call 之后在 saga watcher 中调度动作
- reactjs - 在订阅页面和订单页面上使用贝宝智能按钮时,它显示错误“不要同时传递 createSubscription 和 createOrder”
- qt - 覆盆子交叉编译:在 qt5 cmake 项目中执行 moc 或 rcc 时找不到 libz.so.1
- java - 如何在片段更新时更新工具栏标题
- laravel - Laravel 没有数据库连接
- javascript - 在 Angular 中签入组件为空
- html - 可以 HTML