【问题标题】:How to add several same key object data in one key/value pair Javascript? [duplicate]如何在一个键/值对Javascript中添加多个相同的键对象数据? [复制]
【发布时间】:2018-01-04 04:24:21
【问题描述】:

我有这样的数据:

[{
    "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"}]
    }
]

当我得到这个 json 数据动态时,我希望在 Javascript 或 TypeScript 中动态输出这样的输出。

有人可以帮忙吗。

【问题讨论】:

  • Gona 必须遍历您的原始数组并通过比较构建一个新数组。当您尝试并遇到问题时,Stackoverflow 可以为您提供帮助。 Stackoverflow 不会为你编写代码 :)

标签: javascript angularjs


【解决方案1】:

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

如果组不存在,则使用键和Values 数组创建一个新组。十将新对象放入结果数组。稍后将实际值推送到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; }

【讨论】:

  • 感谢妮娜的帮助。
【解决方案2】:

你可以这样做:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    相关资源
    最近更新 更多