如何使用javascript组合类似的JSON密钥

时间:2016-05-03 22:55:57

标签: javascript json node.js

想知道如何将类似的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"}]
    }
]

2 个答案:

答案 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.filterArray.prototype.findIndex(ES6):

profiles