将JSON对象与相同的“键”合并,并使用JavaScript添加相应的“值”[关闭]

问题描述 投票:-1回答:1

我有以下要合并的JSON对象:

{
  "Results": [
    {
      "Name": "NAME1",
      "Events": {
        "EVENTTYPE": "Upgrade",
        "STARTDATE": "2019-03-05",
        "ENDDATE": "2019-03-19",
        "EVENT_DESC": "Upgrade to A"
      }
    },        
    {
      "Name": "NAME3",
      "Events": {
        "EVENTTYPE": "Upgrade",
        "STARTDATE": "2019-05-08",
        "ENDDATE": "2019-05-29",
        "EVENT_DESC": "Upgrade to A1"
      }
    },
    {
      "Name": "NAME3",
      "Events": {
        "EVENTTYPE": "Upgrade",
        "STARTDATE": "2019-03-06",
        "ENDDATE": "2019-03-13",
        "EVENT_DESC": "Upgrade to A2"
      }
    }
  ]
}

我想合并这样的东西:

{
  "Results": [
    {
      "Name": "NAME1",
      "Events": {
        "EVENTTYPE": "Upgrade",
        "STARTDATE": "2019-03-05",
        "ENDDATE": "2019-03-19",
        "EVENT_DESC": "Upgrade to A"
      }
    },
    {
      "Name": "NAME3",
      "Events": [
        {
          "EVENTTYPE": "Upgrade",
          "STARTDATE": "2019-05-08",
          "ENDDATE": "2019-05-29",
          "EVENT_DESC": "Upgrade to A1"
        },
        {
          "EVENTTYPE": "Upgrade",
          "STARTDATE": "2019-03-06",
          "ENDDATE": "2019-03-13",
          "EVENT_DESC": "Upgrade to A2"
        }
      ]
    }
  ]
}

键是“名称”,您可以在“名称3”下看到重复键,如何合并重复键并在JavaScript中添加相应的值?

javascript json merge key
1个回答
0
投票

你可以试试Array#reduce

var obj = { "Results": [ { "Name": "NAME1", "Events": { "EVENTTYPE": "Upgrade", "STARTDATE": "2019-03-05", "ENDDATE": "2019-03-19", "EVENT_DESC": "Upgrade to A" } },{ "Name": "NAME3", "Events": { "EVENTTYPE": "Upgrade", "STARTDATE": "2019-05-08", "ENDDATE": "2019-05-29", "EVENT_DESC": "Upgrade to A1" } }, { "Name": "NAME3", "Events": { "EVENTTYPE": "Upgrade", "STARTDATE": "2019-03-06", "ENDDATE": "2019-03-13", "EVENT_DESC": "Upgrade to A2" } } ] };

Object.keys(obj).forEach(k=>{
      obj[k] = obj[k].reduce((a,b)=>{
          var ind = a.map(i=>i.Name).indexOf(b.Name)
          if(ind > -1){
            a[ind]['Events'].push(b['Events'])
          }else{
           ar=[];
           ar.push(b['Events'])
           b['Events'] = ar;
           a.push(b)
          }
         return a;
      },[])
});
console.log(obj);
© www.soinside.com 2019 - 2024. All rights reserved.