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
Post a Comment