首页 > 解决方案 > 根据id转换json数组

问题描述

我想根据我拥有的数组的 sID 和 pID 属性将数组转换为另一个数组:

data = [{
 {
    "sID": 10,
     "pID": 5,
     "Sum": 9300,
     "class": "one",
    },{
    "sID": 10,
     "pID": 5,
     "Sum": 2200,
     "class": "two",
    },{
    "sID": 10,
     "pID":6 ,
     "Sum": 4600,
     "class": "one",
    },{
    "sID": 10,
     "pID": 6,
     "Sum": 5300,
     "class": "two"
    }]

我想创建以下格式的数据

[{"sID":10,"pID":5,"one":9300,"two":2200},
 {"sID":10,"pID":6,"one":4600,"two":5300}]

有没有办法做到这一点?

标签: javascriptjson

解决方案


您可以为同一组键获取一个哈希表,并将值的总和分配给结果。

var data = [{ sID: 10, pID: 5, Sum: 9300, class: "one" }, { sID: 10, pID: 5, Sum: 2200, class: "two" }, { sID: 10, pID: 6, Sum: 4600, class: "one" }, { sID: 10, pID: 6, Sum: 5300, class: "two" }],
    keys = ['sID', 'pID'],
    result = Object.values(data.reduce((h, o) => {
        var key = keys.map(k => o[k]).join('|');
        if (!h[key]) {
            h[key] = Object.assign(...keys.map(k => ({ [k]: o[k] })));
        }
        h[key][o.class] = (h[key][o.class] || 0) + o.Sum;
        return h;
    }, Object.create(null)));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读