Javascript lodash groupby键(如果集合中存在)
我有一个数组Javascript lodash groupby键(如果集合中存在),javascript,angular,lodash,Javascript,Angular,Lodash,我有一个数组 { "sec": "11", "details": [ { "id": "1", "user": "Me1" }, { "id": "2", "uesr": "Me2" }, { "id": "3", "user": "Me3" } { "id": "4", "user": "Me4", parentID:"2"
{
"sec": "11",
"details": [
{
"id": "1",
"user": "Me1"
},
{
"id": "2",
"uesr": "Me2"
},
{
"id": "3",
"user": "Me3"
}
{
"id": "4",
"user": "Me4",
parentID:"2"
},
{
"id": "5",
"uesr": "Me5"
},
{
"id": "6",
"user": "Me6",
parentID:"2"
}
{
"id": "7",
"user": "Me7"
},
{
"id": "8",
"uesr": "Me8",
parentID:"7"
},
{
"id": "9",
"user": "Me9",
parentID:"7"
}
],
"isDisplay": "true"
}
输出应该如下所示
{
"sec":"11",
"details":[
{
"id":"1",
"user":"Me1"
},
{
"id":"2",
"uesr":"Me2",
"childs":[
{
"id":"4",
"user":"Me4",
"parentID":"2"
},
{
"id":"6",
"user":"Me6",
"parentID":"2"
}
]
},
{
"id":"3",
"user":"Me3"
},
{
"id":"5",
"uesr":"Me5"
},
{
"id":"7",
"user":"Me7",
"childs":[
{
"id":"8",
"uesr":"Me8",
"parentID":"7"
},
{
"id":"9",
"user":"Me9",
"parentID":"7"
}
]
}
],
"isDisplay":"true"
}
我可以通过简单的循环来实现
在lodash或任何有角度的东西中,都可以实现此功能
我一开始就不知所措,
我只给出下面的代码
this.list = _.groupBy(this.list,"parentID");
但产出不如预期
请帮助或指导
谢谢您需要一种不同的方法,不是分组,而是从相关数据中创建一个树 此解决方案使用一个数组,该数组的键为
id
,同时还使用parentID
。由于存储了子循环、父循环和父循环与其子循环之间的关系,因此该代码使用单个循环
工作原理:
基本上,对于数组中的每个对象,构建新对象所需的id
与构建新对象所需的parentID
一样
比如这个物体
{ id: "6", parentID: "2", user: "Me6" }
它首先使用id
此属性在o
中生成
6: {
id: "6",
parentID: "2",
user: "Me6"
}
然后使用parentID
2: {
children: [
{
id: "6",
parentID: "2",
user: "Me6"
}
]
},
当所有对象都这样处理时,我们最终得到了一棵树
最后,返回根属性的子数组
函数getTree(数据,根){
var o={};
data.forEach(函数(a){
if(o[a.id]&&o[a.id].儿童){
a、 children=o[a.id]。children;
}
o[a.id]=a;
o[a.parentID]=o[a.parentID]|{};
o[a.parentID]。children=o[a.parentID]。children | |[];
o[a.parentID].children.push(a);
});
返回o[root]。子对象;
}
var数据={sec:“11”,详细信息:[{id:“1”,用户:“Me1”},{id:“2”,uesr:“Me2”},{id:“3”,用户:“Me3”},{id:“4”,用户:“Me4”,家长id:“2”},{id:“5”,uesr:“Me5”},{id:“6”,用户:“Me6”,家长id:“2”},{id:“7”,用户:“Me7”},{id:“Me8”,家长id:“7”{id:“9”,用户:“Me9”,isDisplay:“真实”},
结果={sec:“11”,细节:getTree(data.details,未定义),isDisplay:“true”};
控制台日志(结果)代码>
.as控制台包装{max height:100%!important;top:0;}
主题外:您可能需要清理数组;我有时看到user
,有时看到uesr
。谢谢,它工作了,但它又是循环编码,我想知道lodashI中是否有内置代码,我发现很难理解它。。。你能给我一些指导这是如何工作的吗?这是一个令人惊讶的帮助姿态,我面临着在根目录中获取项目总数的问题。你可以问另一个问题,并用代码说明问题,你试过了。在评论中,它不是回答其他任务的正确位置。确定。当然,让我再问一个问题