我正在尝试将数组与一堆只包含字符串,没有对象的平面数组组合在一起。
所以我的数组看起来像这样:
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"
}
]
}
那么有没有人知道如何做到这一点?我完全没有想法。
答案 0 :(得分:1)
我使用_.reduce分组解决了这个问题
{ MotherNode:
{ Node1:
{ ChildNode1: { ChildOfChildNode1: {} },
ChildNode2: { ChildOfChildNode2: {} } },
Node2: { ChildNode3: { ChildOfChildNode3: {}, ChildOfChildNode4: {} } },
Node3: { ChildNode4: { ChildOfChildNode5: {} } } } }
结尾叶不会被设置为值,但应该很容易将该行为更改为适合您使用的情况
{{1}}