Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript lodash groupby键(如果集合中存在)_Javascript_Angular_Lodash - Fatal编程技术网

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中是否有内置代码,我发现很难理解它。。。你能给我一些指导这是如何工作的吗?这是一个令人惊讶的帮助姿态,我面临着在根目录中获取项目总数的问题。你可以问另一个问题,并用代码说明问题,你试过了。在评论中,它不是回答其他任务的正确位置。确定。当然,让我再问一个问题