如何在一个键/值对Javascript中添加几个相同的关键对象数据?

时间:2017-07-28 07:45:55

标签: javascript angularjs

我有这样的数据:

[{
    "Key":"A",
    "Data":"1"  
},
{
    "Key":"B",
    "Data":"2"  
},
{
    "Key":"C",
    "Data":"12" 
},
{
    "Key":"A",
    "Data":"6"  
},
{
    "Key":"B",
    "Data":"4"  
}]

我想要的输出是:

[
    {
        "Key":"A",
        "Value":[{"Data":"1"},{"Data":"6"}]
    },
    {
        "Key":"B",
        "Value":[{"Data":"2"},{"Data":"4"}]
    },
    {
        "Key":"C",
        "Value":[{"Data":"12"}]
    }
]

我希望动态地在Javascript或TypeScript中输出这样的输出,因为我将这个json数据动态化。

有人可以帮忙吗。

2 个答案:

答案 0 :(得分:0)

你可以这样做:

let data = [{
    "Key":"A",
    "Data":"1"  
},
{
    "Key":"B",
    "Data":"2"  
},
{
    "Key":"C",
    "Data":"12" 
},
{
    "Key":"A",
    "Data":"6"  
},
{
    "Key":"B",
    "Data":"4"  
}];

let groupedData = data.reduce((results, item) => {
    results[item.Key] = results[item.Key] || [];
    results[item.Key].push(item.Data);

    return results;
}, {});

console.log(groupedData);

答案 1 :(得分:0)

您可以使用哈希表并按Key属性对项目进行分组。

如果该组不存在,请使用密钥和Values数组创建一个新组。十把新对象puth到结果数组。稍后将实际值推送到Values数组。



var data = [{ Key: "A", Data: "1" }, { Key: "B", Data: "2" }, { Key: "C", Data: "12" }, { Key: "A", Data: "6" }, { Key: "B", Data: "4" }],
    hash = Object.create(null),
    result = data. reduce(function (r, o) {
        if (!hash[o.Key]) {
            hash[o.Key] = { Key: o.Key, Value: [] };
            r.push(hash[o.Key]);
        }
        hash[o.Key].Value.push({ Data: o.Data });
        return r;
    }, []);

console.log(result);

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