javascript - 如何使用下划线js转换这些数据?

标签 javascript arrays rest 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”属性按字母顺序排序,而 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"
            },      
        ],            
    }
]

最佳答案

您可以在分组之后使用映射来创建所需的输出

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

关于javascript - 如何使用下划线js转换这些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37290775/

相关文章:

rest - Github API 身份验证无法在拉取请求上添加评论

rest - CF10 RESTful API 可以做哪些 Coldbox RESTful API 不能做的事情?反之亦然?

rest - "Marking as read"在 RESTful 应用程序中

php - 将数组插入表中

python - Numpy:对 NxM 数组的列(或行)的操作

php - 检测或检查 PC 中安装的现有应用程序

javascript - 如何获得包含尺寸的宽度和高度?

arrays - 如何显示数组元素?

javascript - 如果 Angular View 直接访问服务,这是一个好的做法吗?

javascript - 寻找仅客户端的 Web 开发框架