gpt4 book ai didi

javascript - 下划线递归 groupBy 字符串数组数组

转载 作者:行者123 更新时间:2023-11-29 15:38:15 24 4
gpt4 key购买 nike

我正在尝试将一个数组与一堆仅包含字符串而不包含对象的平面数组组合和分组。

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

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"
}
]
}

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

最佳答案

我使用 _.reduce 分组解决了这个问题,这不是可行的方法

   var result = _.reduce(array,function(memo, val){ 
var tmp = memo;
_.each(val, function(fldr){
if(!_.has(tmp, fldr)){
tmp[fldr] = {}
}
tmp = tmp[fldr]
})

return memo
},{})

end leaf 不会被设置为一个值,但应该很容易将该行为更改为适合您的用例

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

关于javascript - 下划线递归 groupBy 字符串数组数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24395509/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com