javascript - 如何同时过滤和映射数组?
问题描述
我正在尝试安排数据以输入 Recharts。不确定如何正确重新排列数据。Recharts 为我测试过的折线图提供了这种结构:
data = [
{
name: '2017-01-01', gr: 4000, hv: 2400
},
{
name: '2017-01-02', gr: 3000, hv: 1398
},
{
name: '2017-01-03', gr: 2000, hv: 9800
}
];
我有一个 json 文件,我需要重新排列成类似的格式:
[
{
"Month/Year": "2019-09",
"group": "blue",
"flights": "668620"
},
{
"Month/Year": "2019-10",
"group": "blue",
"flights": "662520"
},
{
"Month/Year": "2019-09",
"group": "green",
"flights": "662520"
},
{
"Month/Year": "2019-10",
"group": "green",
"flights": "678520"
}
]
我正在尝试通过映射来处理数据:
processData = (data) => {
return data.map(e => ({
name: e['Month/Year'],
gr: e[THIS WOULD BE green IN group],
hv: e[THIS WOULD BE blue IN group]
}));
};
期望的结果:
data = [
{
name: '2019-09', gr: 662520, hv: 668620
},
{
name: '2019-10', gr: 678520, hv: 662520
}
];
我相信我必须以某种方式过滤以将数据转换为适当的格式。有人可以指出我正确的方向吗?谢谢你。
解决方案
您可以获取一个哈希表并从中获取值。
var data = [{ "Month/Year": "2019-09", group: "blue", flights: "668620" }, { "Month/Year": "2019-10", group: "blue", flights: "662520" }, { "Month/Year": "2019-09", group: "green", flights: "662520" }, { "Month/Year": "2019-10", group: "green", flights: "678520" }],
result = Object.values(data.reduce((r, o) => {
var name = o["Month/Year"];
r[name] = r[name] || { name };
r[name][{ green: 'gr', blue: 'hv'}[o.group]] = o.flights;
return r;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- javascript - 异步等待不会停止
- javascript - 将数据插入到 2 个单独的 mySQL 表中
- java - 我需要将活动“暂停”以使搜索功能正常工作
- xpath - 如何从 Web 浏览器开发人员控制台复制 HTML XPath 以与 HtmlAgilityPack 很好地配合使用?
- python-3.x - Keras 3D 输入到 1D 输出
- r - ggplot facet_wrap() 中的多个正态分布
- firebase - 错误:await 表达式只能在异步函数中使用。尝试用“async”或“async*”标记函数体
- javascript - 为什么在发送 POST 请求时使用 JSON 上的 FormData?
- javascript - 重新加载选项卡的一部分和它的标签计数器,但没有刷新页面就呆在那里
- java - 从 MS Access 数据库中的表访问数据时出现 java.lang.NullPointerException