下划线递归groupBy字符串数组的数组

时间:2014-06-24 20:17:17

标签: javascript arrays angularjs recursion underscore.js

我正在尝试将数组与一堆只包含字符串,没有对象的平面数组组合在一起。

所以我的数组看起来像这样:

var array = [
    ["MotherNode", "Node1", "ChildNode1", "ChildOfChildNode1"],
    ["MotherNode", "Node1", "ChildNode2", "ChildOfChildNode2"],
    ["MotherNode", "Node2", "ChildNode3", "ChildOfChildNode3"],
    ["MotherNode", "Node2", "ChildNode3", "ChildOfChildNode4"],
    ["MotherNode", "Node3", "ChildNode4", "ChildOfChildNode5"],
    ["MotherNode", "Node3", "ChildNode4", "ChildOfChildNode5"]
]

我在javascript / angularjs中这样做,到目前为止,我已经收集到最好的解决方案可能是使用underscore.js groupBy / combine方法。但是,我能找到的大多数示例都是处理对象数组,他们可以使用值的键将它们组合在一起。而且我对算法还不够好,无法自己解决这个问题。

我正在处理的数组可以有数百个值,结果数组可以达到5-10个深度。

通过解析上面的数组我想要的结果看起来像这样:

var result= {
    "MotherNode": [{
        "Node1":[{
            "ChildNode1":"ChildOfChildNode1"
            },{
            "ChildNode2":"ChildOfChildNode2"
        },{
        "Node2":[{
            "ChildNode3":["ChildOfChildNode3","ChildOfChildNode4"]
        },{
        "Node3":[{
            "ChildNode4":"ChildOfChildNode5"
        }
    ]
}

那么有没有人知道如何做到这一点?我完全没有想法。

1 个答案:

答案 0 :(得分:1)

我使用_.reduce分组解决了这个问题

{ MotherNode: 
   { Node1: 
      { ChildNode1: { ChildOfChildNode1: {} },
        ChildNode2: { ChildOfChildNode2: {} } },
     Node2: { ChildNode3: { ChildOfChildNode3: {}, ChildOfChildNode4: {} } },
     Node3: { ChildNode4: { ChildOfChildNode5: {} } } } }

结尾叶不会被设置为值,但应该很容易将该行为更改为适合您使用的情况

{{1}}