How can I merge duplicate keys in a JavaScript object? -


i have javascript object follows :

{     "zone": [{         "$origin": "domainname.com.",         "a": [{                 "name": "ironman",                 "ip": "192.168.0.1"             }, {                 "name": "thor",                 "ip": "192.168.0.2"             },             {                 "name": "odin",                 "ip": "192.168.0.3"             }         ]      }, {         "$origin": "domainname.com.",         "a": [{                 "name": "javis",                 "ip": "192.168.0.4"             },             {                 "name": "jump",                 "ip": "192.168.0.5"             },             {                 "name": "jupiter",                 "ip": "192.168.0.6"             }         ]     }] } 

i want merge duplicate key in "$origin" , append value in "a" key

{     "zone": [{         "$origin": "domainname.com.",         "a": [{                 "name": "ironman",                 "ip": "192.168.0.1"             }, {                 "name": "thor",                 "ip": "192.168.0.2"             },             {                 "name": "odin",                 "ip": "192.168.0.3"             },             {                 "name": "javis",                 "ip": "192.168.0.4"             },             {                 "name": "jump",                 "ip": "192.168.0.5"             },             {                 "name": "jupiter",                 "ip": "192.168.0.6"             }         ]      }] } 

i know how merge duplicate keys 2 different object other topics, don't know how merge , find duplicate keys in same object.

first of all, use reduce collect duplicates , save them in temporary object values of $origin keys. iterate keys , reconstruct the object.

another way doing of work in reduce method filtering think current solution faster.

const data = {      "zone": [{          "$origin": "domainname.com.",          "a": [{                  "name": "ironman",                  "ip": "192.168.0.1"              }, {                  "name": "thor",                  "ip": "192.168.0.2"              },              {                  "name": "odin",                  "ip": "192.168.0.3"              }          ]        }, {          "$origin": "domainname.com.",          "a": [{                  "name": "javis",                  "ip": "192.168.0.4"              },              {                  "name": "jump",                  "ip": "192.168.0.5"              },              {                  "name": "jupiter",                  "ip": "192.168.0.6"              }          ]      },      {          "$origin": "eomainname.com.",          "a": [{                  "name": "javis",                  "ip": "192.168.0.4"              },              {                  "name": "jump",                  "ip": "192.168.0.5"              },              {                  "name": "jupiter",                  "ip": "192.168.0.6"              }          ]      }]  }    const result = { zone: [] }  const tmp = data.zone.reduce((acc, curr) => {    if (acc.hasownproperty(curr.$origin)) {      acc[curr.$origin] = acc[curr.$origin].concat(curr.a)    } else {      acc[curr.$origin] = curr.a    }    return acc;  }, {})    result.zone = object.keys(tmp).map((key) => {    return {      $origin: key,      a: tmp[key]    }  })    console.log(result)


Comments

Popular posts from this blog

ubuntu - PHP script to find files of certain extensions in a directory, returns populated array when run in browser, but empty array when run from terminal -

php - How can i create a user dashboard -

javascript - How to detect toggling of the fullscreen-toolbar in jQuery Mobile? -