javascript - 减少 JSON 数据
问题描述
我有 JSON 数据:
var data = [
{ "Date": "\/Date(1583778600000)\/", "Rate": 1310, "Product": "Prod1" },
{ "Date": "\/Date(1583865000000)\/", "Rate": 1320, "Product": "Prod2" },
{ "Date": "\/Date(1583951400000)\/", "Rate": 1330, "Product": "Prod3" },
{ "Date": "\/Date(1583778600000)\/", "Rate": 1340, "Product": "Prod4" },
{ "Date": "\/Date(1583778600000)\/", "Rate": 1350, "Product": "Prod5" },
{ "Date": "\/Date(1584037800000)\/", "Rate": 1360, "Product": "Prod6" },
{ "Date": "\/Date(1583865000000)\/", "Rate": 1370, "Product": "Prod7" },
{ "Date": "\/Date(1583951400000)\/", "Rate": 1380, "Product": "Prod8" }
];
我想把它转换成这样的东西:
var result = [
{ "Date": "2020-03-10", "Rate": { 1310: "Prod1", 1340: "Prod4", 1350: "Prod5" } },
{ "Date": "2020-03-11", "Rate": { 1320: "Prod2", 1370: "Prod7" } },
{ "Date": "2020-03-12", "Rate": { 1330: "Prod3", 1380: "Prod8" } },
{ "Date": "2020-03-13", "Rate": { 1360: "Prod6" } }
];
谢谢你
解决方案
var data = [
{ "Date": "\/Date(1583778600000)\/", "Rate": 1310, "Product": "Prod1" },
{ "Date": "\/Date(1583865000000)\/", "Rate": 1320, "Product": "Prod2" },
{ "Date": "\/Date(1583951400000)\/", "Rate": 1330, "Product": "Prod3" },
{ "Date": "\/Date(1583778600000)\/", "Rate": 1340, "Product": "Prod4" },
{ "Date": "\/Date(1583778600000)\/", "Rate": 1350, "Product": "Prod5" },
{ "Date": "\/Date(1584037800000)\/", "Rate": 1360, "Product": "Prod6" },
{ "Date": "\/Date(1583865000000)\/", "Rate": 1370, "Product": "Prod7" },
{ "Date": "\/Date(1583951400000)\/", "Rate": 1380, "Product": "Prod8" }
];
var o = data.reduce((a, b) => {
b.Date = moment(b.Date).format('YYYY-MM-DD');
a[b.Date] = a[b.Date] || [];
a[b.Date].push({ [b.Rate]: b.Product });
return a;
}, {});
var result = Object.keys(o).map(function (k) {
return { Date: k, Rate: Object.assign.apply({}, o[k]) };
});
var data = [
{ "Date": "\/Date(1583778600000)\/", "Rate": 1310, "Product": "Prod1" },
{ "Date": "\/Date(1583865000000)\/", "Rate": 1320, "Product": "Prod2" },
{ "Date": "\/Date(1583951400000)\/", "Rate": 1330, "Product": "Prod3" },
{ "Date": "\/Date(1583778600000)\/", "Rate": 1340, "Product": "Prod4" },
{ "Date": "\/Date(1583778600000)\/", "Rate": 1350, "Product": "Prod5" },
{ "Date": "\/Date(1584037800000)\/", "Rate": 1360, "Product": "Prod6" },
{ "Date": "\/Date(1583865000000)\/", "Rate": 1370, "Product": "Prod7" },
{ "Date": "\/Date(1583951400000)\/", "Rate": 1380, "Product": "Prod8" }
];
var o = data.reduce((a, b) => {
b.Date = moment(b.Date).format('YYYY-MM-DD');
a[b.Date] = a[b.Date] || [];
a[b.Date].push({ [b.Rate]: b.Product });
return a;
}, {});
var result = Object.keys(o).map(function (k) {
return { Date: k, Rate: Object.assign.apply({}, o[k]) };
});
console.log(result);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment-with-locales.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
推荐阅读
- java - Scenebuilder 16 不是 Apache NetBeans 12.2 的有效 Scenebuilder 安装
- r - 数据集的分层过滤
- azure - 无法通过 REST API 从 AZURE 下载 zip 存档
- algorithm - 不使用额外空间时算法的空间复杂度
- visual-studio - 报表构建器中的求和表达式
- python - 无法在 kivy 中访问 2 个动态设置的 id
- ios - Typeform 未显示在移动设备上的 Safari 上
- android - 如何将视图设置为键盘上方?
- unity3d - Unity-WebGL 显示灰色窗口而不是交互式网站
- delphi - Delphi 10 Seattle FMX Canvas 画线问题