首页 > 解决方案 > 将表格数据塑造成层次结构

问题描述

我想重塑这个表格数据

[{
        "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循环?

标签: javascriptnode.js

解决方案


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);

推荐阅读