如果某些键和值在JavaScript中匹配,如何合并对象? [英] How to merge objects if certain keys and values match in JavaScript?
本文介绍了如果某些键和值在JavaScript中匹配,如何合并对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
如果fname和address相同,我想合并可以是数组中所有对象的任何随机字符串的最后一个键.为了提供更多背景信息,我需要使用这种格式来绘制带有图表的图形.
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
},
];
这应该返回类似
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
},
];
推荐答案
使用一种非常幼稚的方法,您可以创建一个哈希映射来收集唯一的名称+地址,然后在该映射上进行迭代. 像这样:
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]));
然后results
应该保存您处理过的数据
Then results
should hold your processed data
这篇关于如果某些键和值在JavaScript中匹配,如何合并对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文