下划线一行将集合转换为对象的对象

Underscore one-liner to transform a collection into object of objects

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

示例:转换这个

[
    {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,但我仍然需要在某个地方使用循环,而我正在努力避免这种情况。

感谢 T.J Crowder _.reduce 成功了:

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