如何使用下划线 js 转换此数据?

How can I transform this data using underscore js?

我有一些数据从 REST API 返回给我。我希望它以某种格式用于我的 Angular 2 应用程序。

如何使用underscore js进行如下数据转换?

从 REST 返回的数据 API:

[    
    {
        "ProductVariantID": "133",
        "ProductID": "259",
        "ProductGender": "Male",
        "Size": "17.5",
        "Color": "Red",
        "MSRP": "0",
        "MAP": "0",
        "UPC": "99999106"
    },
    {
        "ProductVariantID": "128",
        "ProductID": "259",
        "ProductGender": "Male",
        "Size": "17.5",
        "Color": "Blue",
        "MSRP": "0",
        "MAP": "0",
        "UPC": "99999101"
    },
    {
        "ProductVariantID": "130",
        "ProductID": "259",
        "ProductGender": "Male",
        "Size": "19.5",
        "Color": "Blue",
        "MSRP": "0",
        "MAP": "0",
        "UPC": "99999103"
    },
    {
        "ProductVariantID": "129",
        "ProductID": "259",
        "ProductGender": "Male",
        "Size": "18.5",
        "Color": "Blue",
        "MSRP": "0",
        "MAP": "0",
        "UPC": "99999102"
    },
    {
        "ProductVariantID": "132",
        "ProductID": "259",
        "ProductGender": "Male",
        "Size": "15.5",
        "Color": "Red",
        "MSRP": "0",
        "MAP": "0",
        "UPC": "99999105"
    },    
    {
        "ProductVariantID": "131",
        "ProductID": "259",
        "ProductGender": "Male",
        "Size": "21.5",
        "Color": "Blue",
        "MSRP": "0",
        "MAP": "0",
        "UPC": "99999104"
    },
    {
        "ProductVariantID": "127",
        "ProductID": "259",
        "ProductGender": "Male",
        "Size": "15.5",
        "Color": "Blue",
        "MSRP": "0",
        "MAP": "0",
        "UPC": "99999100"
    }       
]

我想把它改成下面这样。请注意,顶级数组按其对象的 "Color" 属性 字母顺序排序,而变体数组按其对象的 "Size" 属性 数字排序。本质上,我想要一个新的对象数组,按颜色分组并将原始对象包含在 "Variants" 数组 属性.

期望的输出:

[
    {
        "Color": "Blue",
        "Variants": [
             {
                "ProductVariantID": "127",
                "ProductID": "259",
                "ProductGender": "Male",
                "Size": "15.5",
                "Color": "Blue",
                "MSRP": "0",
                "MAP": "0",
                "UPC": "99999100"
            },
            {
                "ProductVariantID": "128",
                "ProductID": "259",
                "ProductGender": "Male",
                "Size": "17.5",
                "Color": "Blue",
                "MSRP": "0",
                "MAP": "0",
                "UPC": "99999101"
            },
            {
                "ProductVariantID": "129",
                "ProductID": "259",
                "ProductGender": "Male",
                "Size": "18.5",
                "Color": "Blue",
                "MSRP": "0",
                "MAP": "0",
                "UPC": "99999102"
            },
            {
                "ProductVariantID": "130",
                "ProductID": "259",
                "ProductGender": "Male",
                "Size": "19.5",
                "Color": "Blue",
                "MSRP": "0",
                "MAP": "0",
                "UPC": "99999103"
            },
            {
                "ProductVariantID": "131",
                "ProductID": "259",
                "ProductGender": "Male",
                "Size": "21.5",
                "Color": "Blue",
                "MSRP": "0",
                "MAP": "0",
                "UPC": "99999104"
            }      
        ],            
    }
    {
        "Color": "Red",
        "Variants": [
             {
                "ProductVariantID": "132",
                "ProductID": "259",
                "ProductGender": "Male",
                "Size": "15.5",
                "Color": "Red",
                "MSRP": "0",
                "MAP": "0",
                "UPC": "99999101"
            },  
            {
                "ProductVariantID": "133",
                "ProductID": "259",
                "ProductGender": "Male",
                "Size": "17.5",
                "Color": "Red",
                "MSRP": "0",
                "MAP": "0",
                "UPC": "99999101"
            },      
        ],            
    }
]

您可以在 group by 之后使用 map 来创建所需的输出

var temp1=_.groupBy(result, 'Color');
_.map(temp1,function(item,key){return {'Color':key,'Variants':item}});