使用基于内部键值的键创建对象

时间:2014-02-04 00:49:42

标签: javascript object underscore.js lodash

这可以通过使用Underscore或Lo-Dash来解决。使用它们,我已经接近我想要的解决方案,但还不够接近。而且我已经接近在stackoverflow上找到解决方案,但似乎没有人能够得到我正在追求的东西。这是原始对象的再现,然后是对象,因为它可能会根据内部键的值重新创建。

原始

{
    "muppets": [
    {
        "number": {
            "value": "one"
        },
        "name": "Fozzie"
    },
    {
        "number": {
            "value": "two"
        },
        "name": "Kermit"
    },
    {
        "number": {
            "value": "one"
        },
        "name": "Rowlf"
    }
    ]
}

需要什么

{
"muppets": [
    {
        "one": [
            {
                "number": {
                    "value": "one"
                },
                "name": "Fozzie"
            },
            {
                "number": {
                    "value": "one"
                },
                "name": "Fozzie"
            }
        ]
    },
    {
        "two": [
            {
                "number": {
                    "value": "two"
                },
                "name": "Kermit"
            }
        ]
    }
]
}

提前致谢。

1 个答案:

答案 0 :(得分:2)

这应该这样做:

obj.muppets = _.map(_.groupBy(obj.muppets, function(m) {
    return m.number.value;
}), function(a, g) {
    var o={}; o[g]=a; return o;
});

请注意,不保证新的muppets数组按任何顺序排序。