首页 > 解决方案 > 按相同键值合并对象数组

问题描述

我有一个像这样的对象数组:

[
  {
    "name": "Blah",
    "description": "This is a description"
  },
  {
    "name": "Foo",
    "description": "This is a description"
  },
  {
    "name": "Bar",
    "description": "This is a description"
  },
  {
    "name": "Blah",
    "description": "This is a description"
  },
  {
    "name": "Test",
    "description": "This is a description"
  }
]

我想运行某种函数来将具有相同名称的对象组合成一个description1 + "\n" + description2模式,所以最终结果是:

[
  {
    "name": "Foo",
    "description": "This is a description"
  },
  {
    "name": "Bar",
    "description": "This is a description"
  },
  {
    "name": "Blah",
    "description": "This is a description\nThis is a description"
  },
  {
    "name": "Test",
    "description": "This is a description"
  }
]

不需要保留数组的顺序。任何帮助,将不胜感激。谢谢!

标签: javascriptarraysjsonfor-loopjavascript-objects

解决方案


您可以使用查找对象来查找重复项:

 const result = [], hash = {};
 for(const {name, description} of input) {
    if(hash[name]) {
      hash[name].description += "\n" + description;
    } else {
      result.push(hash[name] = { name, description });
   }
 }

推荐阅读