Underscore one-liner将集合转换为对象对象

时间:2015-01-08 10:33:23

标签: javascript underscore.js

我试图找到一个下划线的单行代码,将一个集合转换为字典字典,以便以后快速访问。

示例:转换此

[
    {a:'prop1', b:'subProp1', c:'first' }, 
    {a:'prop1', b:'subProp2', c:'second'}, 
    {a:'prop2', b:'subProp1', c:'third'}, 
    {a:'prop2', b:'subProp2', c:'forth'}
]

进入这个

{
    prop1 : 
    { 
        subProp1 : {a:'prop1', b:'subProp1', c:'first' },
        subProp2 : {a:'prop1', b:'subProp2', c:'second'}
    },
    prop2 : 
    { 
        subProp1 : {a:'prop1', b:'subProp1', c:'third' },
        subProp2 : {a:'prop1', b:'subProp2', c:'forth'}
    }
}

我知道使用循环很容易,但我正在寻找一个可以提供下划线的整洁解决方案。

我已尝试过groupbBy和indexBy,但我仍然需要在某个地方使用循环,这是我试图避免的。

1 个答案:

答案 0 :(得分:0)

感谢T.J Crowder _.reduce做了诀窍:

_.reduce(collection, function (aggr, obj) {
                        aggr[obj.a] = aggr[obj.a] || {};
                        aggr[obj.a][obj.b] = obj;
                        return aggr;
                    }, {});