javascript - 将表格数据塑造成层次结构
问题描述
我想重塑这个表格数据
[{
"orderid": 1,
"grandtotal": 100.00,
"detailid": 11,
"description": "apple"
},
{
"orderid": 1,
"grandtotal": 100.00,
"detailid": 12,
"description": "orange"
},
{
"orderid": 2,
"grandtotal": 0.00
},
{
"orderid": 3,
"grandtotal": 300.00,
"detailid": 31,
"description": "tea"
},
{
"orderid": 3,
"grandtotal": 300.00,
"detailid": 32,
"description": "coffee"
}]
进入主/从层次结构:
[{
"orderid": 1,
"grandtotal": 100.00,
"details": [{
"detailid": 11,
"description": "apple"
},
{
"detailid": 12,
"description": "orange"
}
]
},
{
"orderid": 2,
"grandtotal": 0.00,
"details": []
},
{
"orderid": 3,
"grandtotal": 300.00,
"details": [{
"detailid": 31,
"description": "tea"
},
{
"detailid": 32,
"description": "coffee"
}
]
}
]
如何做到这一点而不是传统的for
循环?
解决方案
const reshape = (inputArray) => {
const reducedArray = inputArray.reduce((resultedObject, { orderid, grandtotal, detailid, description }) => {
let detail = null;
if (detailid !== undefined || description !== undefined) detail = {detailid, description};
if (orderid in resultedObject && detail) {
resultedObject[orderid].details.push(detail);
}
if (!(orderid in resultedObject)) {
resultedObject[orderid] = {orderid, grandtotal, details: []};
detail && resultedObject[orderid].details.push(detail);
}
return resultedObject;
}, {});
return Object.values(reducedArray);
}
reshape(data);
推荐阅读
- nativescript - Nativescript 6 HtmlView字体颜色未应用
- kubernetes - 节点上的 CPU 限制(核心)超过 100%
- compiler-errors - 包括 Dakota.v.6.10 在内的未解决问题:即使存在头文件,Teuchos_as.hpp 中的未定义引用
- vue.js - Vue - 相同的突变刷新(或不!)组件取决于它是从哪个组件调用的?
- sql - SQL返回数据或根据特定记录号过滤数据
- xcode - 我在哪里可以编辑 xcode 的多光标?
- multipart - 使用 multipart/form-data 调用 REST API
- .net - 如何为 Teams 原生 API 生成 SkyeToken?
- javascript - 使用画布游戏完美处理 keydown 事件
- python - 如何手动切换在kivy python中按下的按钮?