[英]Creating an Associative array from a flat array based on dotted key parent value
我在从平面数组创建格式化数组时遇到问题,父数值采用点分隔格式。 喜欢 ..
admin
admin.user
。 我想要数据的格式是。
admin: {
data: {...admin obj..},
children: [{
user: {
data: {...user obj...},
children: [..and so on]
}
}]
}
提供的数据格式是
[{
"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;
}, {})
您可以通过拆分名称来使用嵌套哈希表方法,并通过为每个步骤获取具有给定信息的自己的哈希键来遍历给定信息。
var data = [{ 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 }], result = [], hash = { _: result }; data.forEach(function (o) { o.name.split('.').reduce(function (r, k) { if (!r[k]) { r[k] = { _: [] }; r._.push({ data: o, children: r[k]._ }); } return r[k]; }, hash); }); console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.