如果某些键和值在JavaScript中匹配,如何合并对象? [英] How to merge objects if certain keys and values match in JavaScript?

查看:68
本文介绍了如果某些键和值在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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆