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

时间:2016-05-18 05:12:36

标签: javascript arrays rest underscore.js

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

如何使用下划线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”属性上按字母顺序排序,Variants数组按其对象的“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"
            },      
        ],            
    }
]

1 个答案:

答案 0 :(得分:1)

您可以使用分组后的地图来创建所需的输出

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