javascript将扁平的数据转为树形结构
2017-11-29 13:03
453 查看
方式1(最高效)
/**将扁平的结构转换为树形结构
* 1 将格式转为类似josn格式
* 2 一个for循环,将它添加到它所在的父节点的children中
*/
function build(menuList){
console.time('build')
let temp = {};
let ans = {};
for(let i in menuList){
temp[menuList[i].id] = menuList[i];
}
for(let i in temp){
if(temp[i].parent_id) {
if(!temp[temp[i].parent_id].children) {
temp[temp[i].parent_id].children = new Object();
}
temp[temp[i].parent_id].children[temp[i].id] = temp[i];
} else {
ans[temp[i].id] = temp[i];
}
}
console.timeEnd('build');
return ans;
}
console.log(build(menu_list));
方式二
/**
* 将扁平的结构转换为树形结构
* 1将节点分类,分别装到数组的对应层中
* 2 从最后一层向上遍历,将节点赛到上一层他父节点的chilren中
* 使用限制:
* 节点必须标有层数表示它在哪一层
* 传入数组中对象必要参数:id, menu_level, parent_id
*/
function buildMenu(menuList){
console.time('buildMenu')
let levels = new Array();
//第一个for循环,将menulist数组中每个对象转为类似JOSN格式-> id : {}
for(let i in menuList){
//将每个menuList[i]转成对象,装到levels数组中,在第i层装到level[i-1]中
if(!levels[menuList[i].menu_level]){
levels[menuList[i].menu_level] = new Object();
}
levels[menuList[i].menu_level][menuList[i].id] = menuList[i];
}
//将父往子里面塞
for(let i = levels.length -1; i > 0; i--){
for(let obj in levels[i]){
//向这个节点的父节点的children里加她自己
if(levels[i - 1][levels[i][obj].parent_id].children == undefined){
levels[i - 1][levels[i][obj].parent_id].children = new Object();
}
levels[i - 1][levels[i][obj].parent_id ].children[levels[i][obj].id] = levels[i][obj];
}
}
console.timeEnd('buildMenu');
return levels[0];
}
/**将扁平的结构转换为树形结构
* 1 将格式转为类似josn格式
* 2 一个for循环,将它添加到它所在的父节点的children中
*/
function build(menuList){
console.time('build')
let temp = {};
let ans = {};
for(let i in menuList){
temp[menuList[i].id] = menuList[i];
}
for(let i in temp){
if(temp[i].parent_id) {
if(!temp[temp[i].parent_id].children) {
temp[temp[i].parent_id].children = new Object();
}
temp[temp[i].parent_id].children[temp[i].id] = temp[i];
} else {
ans[temp[i].id] = temp[i];
}
}
console.timeEnd('build');
return ans;
}
console.log(build(menu_list));
方式二
/**
* 将扁平的结构转换为树形结构
* 1将节点分类,分别装到数组的对应层中
* 2 从最后一层向上遍历,将节点赛到上一层他父节点的chilren中
* 使用限制:
* 节点必须标有层数表示它在哪一层
* 传入数组中对象必要参数:id, menu_level, parent_id
*/
function buildMenu(menuList){
console.time('buildMenu')
let levels = new Array();
//第一个for循环,将menulist数组中每个对象转为类似JOSN格式-> id : {}
for(let i in menuList){
//将每个menuList[i]转成对象,装到levels数组中,在第i层装到level[i-1]中
if(!levels[menuList[i].menu_level]){
levels[menuList[i].menu_level] = new Object();
}
levels[menuList[i].menu_level][menuList[i].id] = menuList[i];
}
//将父往子里面塞
for(let i = levels.length -1; i > 0; i--){
for(let obj in levels[i]){
//向这个节点的父节点的children里加她自己
if(levels[i - 1][levels[i][obj].parent_id].children == undefined){
levels[i - 1][levels[i][obj].parent_id].children = new Object();
}
levels[i - 1][levels[i][obj].parent_id ].children[levels[i][obj].id] = levels[i][obj];
}
}
console.timeEnd('buildMenu');
return levels[0];
}
相关文章推荐
- 在SQL Server中巧妙存储树形结构数据及ASP.Net javaScript无刷新树形GridView的实现
- JavaScript之树形结构的数据(一)
- JavaScript之树形结构数据(二)
- JavaScript 将行结构数据转化为树形结构,可提供给常用的tree插件直接使用(高效转化方案)
- javascript实现扁平数组构建树形结构(多级菜单应用)-优化
- JavaScript递归方法 生成 json tree 树形结构数据
- JavaScript将具有父子关系的原始数据格式化成树形结构数据
- JavaScript递归方法 生成 json tree 树形结构数据
- 实现Comparable接口对树形结构数据进行排序
- 【javascript】数据结构-集合
- 利用JavaScript 动态生成 树形结构
- JSON复杂数据处理之Json树形结构数据转Java对象并存储到数据库的实现
- 【java基础 5】树形结构数据加载的思考
- 通用列表数据转化为树形结构
- 树形结构数据后台处理:一次循环生成树
- 【java基础 4】树形结构数据呈现的非递归算法(循环)实现
- 多叉树结合JavaScript树形控件实现无限级树形菜单(一种构建多级有序树形结构JSON(或XML)数据源的方法)
- 树形结构在开发中的应用(C# TreeView数据动态绑定)
- 数据结构之【树形结构】复习题
- php当数据量不是很大的时候,使用【递归循环出树形结构】的一个用户下面的所有人