Talal Najam :
I want to merge the last keys that can be any random string of all the objects in the array if the fname and address is same. To give more context, I need this format to draw a graph with recharts.
const data = [
{
fname: "adam",
address: "us",
key1: 12
},
{
fname: "adam",
address: "us",
key2: 31
},
{
fname: "adam",
address: "uk",
qwe: 41
},
{
fname: "Dan",
address: "au",
asd: 31
},
{
fname: "Dan",
address: "au",
zxc: 31
},
{
fname: "Chris",
address: "nz",
randomkey: 12
},
{
fname: "Chris",
address: "br",
randomkey2: 14
},
];
This should return something like
const data = [
{
fname: "adam",
address: "us",
key1: 12,
key2: 31
},
{
fname: "adam",
address: "uk",
qwe: 41
},
{
fname: "Dan",
address: "au",
asd: 31,
zxc: 31
},
{
fname: "Chris",
address: "nz",
randomkey: 12
},
{
fname: "Chris",
address: "br",
randomkey2: 14
},
];
GriffoGoes :
Using a very naive approach, you could create a hash map to collect the unique name + address, then iterate over the map. Something like this:
const data = [{}, {}, {}] //...data in question
var map = {};
data.forEach(function(item) {
var id = item.fname + "|" + item.address; // | cannot occur in address or name
if (map[id] === undefined) {
map[id] = item;
} else {
var existing = map[id]; // adding/updating new keys
for (var propt in item) {
existing[propt] = item[propt];
}
}
});
var results = [];
Object.keys(map).forEach(k => results.push(map[k]));
Then results
should hold your processed data
Guess you like
Origin http://43.154.161.224:23101/article/api/json?id=319493&siteId=1