如何将重复的Json对象合并为一个?

时间:2018-03-26 19:31:54

标签: arrays json arraylist

我的json如下所示

[{
    "attributeId": 6,
    "attributeType": "price",
    "attributeValue": "{10,20,100}",
    "displayOn": "true",
    "attributeName": "price"
  },
  {
    "attributeId": 6,
    "attributeType": "price",
    "attributeName": "price",
    "displayOn": "true",
    "attributeValue": "{21,40,200}"
  }
]

我想合并到单一的没有重复的内容,如

[{
  "attributeId": 6,
  "attributeType": "price",
  "attributeValue": "{10,20,100}",
  "displayOn": "true",
  "attributeName": "price",
  "attributeValue": "{21,40,200}"
}]

我尝试了extendconcat功能。但是,我无法弄清楚这样做的正确方法。请帮帮我。

1 个答案:

答案 0 :(得分:0)

只要您希望稍后在数组中的对象覆盖数组中较早的对象值,您就可以reduce数组并将每个旧对象复制到新对象中:

var arr = [{...}, {...}];

var merged = arr.reduce(function(a,b) {
    for (var key in a) {
        a[key] = b[key];
    }
    return a;
});

使用ES6语法和功能对此进行了大量清理:

let arr = [{...}, {...}];

let merged = arr.reduce((a, b) => Object.assign(b, a));

请注意,在您的示例中,数组实体不是JSON字符串,而是解析对象。如果您首先需要将JSON字符串解析为对象,则需要在减少数组之前执行此操作。

同样不是对象不能像attributeValue那样拥有相同的属性键两次。如果需要保留此值,您还需要其他一些方法。