想知道如何将类似的json密钥组合在一起以消除冗余数据。换句话说,如何在同一个键下连接相似的值而不是重复数据?我目前的json数据看起来像这样:
[
{
"listing_id": 1,
"furniture_id": 2,
"price": 129.99,
"duration": null,
"photo_id": 1,
"url": "http://d3otkl9byfilk1.cloudfront.net/images/COHG3---A_Graceland-Silver-With-Malva-Blue-Grey-Contrast"
},
{
"listing_id": 1,
"furniture_id": 2,
"price": 129.99,
"duration": null,
"photo_id": 2,
"url": "https://www.responsive-checkout.com/demo/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/c/o/couch.jpg"
}
]
如何组合冗余键使其如下所示:
[
{
"listing_id": 1,
"furniture_id": 2,
"price": 129.99,
"duration": null,
"photo_id": 1,
"url": [{"http://d3otkl9byfilk1.cloudfront.net/images/COHG3---A_Graceland-Silver-With-Malva-Blue-Grey-Contrast", "https://www.responsive-checkout.com/demo/media/catalog/product/cache/1/image/9df78eab33525d08d6e5fb8d27136e95/c/o/couch.jpg"}]
}
]
答案 0 :(得分:0)
使用reduce
将initial
作为您提供的第一个数组:
[initial.reduce(function (obj) { return obj })];
这基本上将数组内插到它的第一个元素然后将它放在一个数组中,如果你有不同值的对象,它就不够智能。如果这是您需要的,请更具体
如果你想要推断出是否应该将两个对象合并到第一个对象中,只有当某些属性的值相同时,这就是你要找的东西:
var result = [];
initial.reduce(function (previous, current, index) {
if (index === 0) {
result.push(current);
return current;
}
if (current.prop1 !== previous.prop1
|| current.prop2 !== previous.prop2
|| current.prop3 ...) {
result.push(current);
}
return current;
});
然后,如果simmilar对象不是彼此相邻,那将无法工作。你真的需要更具体
答案 1 :(得分:0)
好的,这很有趣。我花了一段时间,但这是一个可能的解决方案。我确信有更好的方法可以做到这一点,但这很有效。
使用Array.prototype.filter和Array.prototype.findIndex(ES6):
profiles