Javascript 基于虚线键父值从平面数组创建关联数组

Javascript 基于虚线键父值从平面数组创建关联数组,javascript,arrays,sorting,Javascript,Arrays,Sorting,我有一个问题,在创建一个格式化数组从平面数组与父值是在点分隔格式。像 Admin是用户的父级:用户父级Admin 用户是 测试:测试父项是管理员用户 我想要的数据格式是 admin: { data: {...admin obj..}, children: [{ user: { data: {...user obj...}, children: [..and so on] }

我有一个问题,在创建一个格式化数组从平面数组与父值是在点分隔格式。像

  • Admin是用户的父级:用户父级
    Admin
  • 用户是 测试:测试父项是
    管理员用户
我想要的数据格式是

admin: {
    data: {...admin obj..},
    children: [{
        user: {
                data: {...user obj...},
                children: [..and so on]
            }
    }]
}
提供的数据格式为

到目前为止,我所做的是:


您可以使用嵌套的哈希表方法,通过拆分名称和遍历给定的信息,为每个步骤获取一个自己的具有给定信息的哈希键

var data=[{name:“admin”,display_name:“Menu”,type:1,application_to:null,perm_parent_id:null,description:“可以看到管理员菜单项”},{name:“admin.users”,display_name:“Menu”,type:1,application_to:null,perm_parent_id:“admin”,description:null},{name:“admin.users.edit”,display_name:“edit”,类型:1,应用于:null,perm\u parent\u id:“admin.users”,description:null},{name:“admin.users.view”,display\u name:“view”,类型:1,应用于:null,perm\u parent\u id:“admin.users”,description:null},{name:“admin.groups”,display\u name:“groups&Permissions”,type:1,应用于:null,perm\u parent\u id:“admin”,description:null},
结果=[],
散列={{u0:result};
data.forEach(函数(o){
o、 name.split('.').reduce(函数(r,k){
如果(!r[k]){
r[k]={{}:[]};
r、 _u.push({data:o,children:r[k]。});
}
返回r[k];
},散列);
});
控制台日志(结果)
。作为控制台包装{最大高度:100%!重要;顶部:0;}
[{
    "name": "admin",
    "display_name": "Menu",
    "type": 1,
    "applies_to": null,
    "perm_parent_id": null,
    "description": "Can see the admin menu item"
}, {
    "name": "admin.users",
    "display_name": "Menu",
    "type": 1,
    "applies_to": null,
    "perm_parent_id": "admin",
    "description": null
}, {
    "name": "admin.users.edit",
    "display_name": "Edit",
    "type": 1,
    "applies_to": null,
    "perm_parent_id": "admin.users",
    "description": null
}, {
    "name": "admin.users.view",
    "display_name": "View",
    "type": 1,
    "applies_to": null,
    "perm_parent_id": "admin.users",
    "description": null
}, {
    "name": "admin.groups",
    "display_name": "Groups & Permissions",
    "type": 1,
    "applies_to": null,
    "perm_parent_id": "admin",
    "description": null
}]
 var groups = myjson.reduce(function(arr, a) {
var key = a['perm_parent_id'];
var level = keys.length;
if (a['perm_parent_id'] === null) {
arr[key] = arr[key] || {}
arr[key]["data"] = a || {};
arr[key]["children"] = [];
} else {
arr[key] = arr[key] || {}
arr[key] = arr[key] || {};
arr[key]["children"] = arr[key]["children"] || [];
arr[key]["children"].push(a);
}
return arr;
}, {})