面试题-树状数组结构转化
时间:2022-07-28
本文章向大家介绍面试题-树状数组结构转化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目如下:
这道题是我朋友发给我的,之前一开始看的时候,觉得很简单,但仔细往下看的时候,眉头一皱发现事情并不简单。
传进去的数组:
let oldArr = [
{
'1_class': '工具',
'2_class': '备忘录',
'1_id': 1,
'2_id': 2
},
{
'1_class': '教育',
'2_class': '学历教育',
'3_class': '中等',
'1_id': 3,
'2_id': 4,
'3_id': 6
},
{
'1_class': '教育',
'2_class': '学历教育',
'3_class': '高等',
'1_id': 3,
'2_id': 4,
'3_id': 5
},
{
'1_class': '教育',
'2_class': '成人教育',
'1_id': 3,
'2_id': 7,
},
];
输出的数组:
let result = [
{
value: 1,
label: '工具',
children: [
{
value: 2,
label: '备忘录',
children: []
}
]
}, {
value: 3,
label: '教育',
children: [
{
value: 4,
label: '学历教育',
children: [
{
value: 6,
label: '中等',
children: []
},
{
value: 5,
label: '高等',
children: []
}
]
},
{
value: 7,
label: '成人教育',
children: []
}
]
}
]
建议大家好好想想,争取能够自己解出来
参考一下我的解题方法:
- 先算出层级嵌套数
遍历数组,再遍历数组的元素,用
parseInt
拿到每一个值,将最大的值取出来,即为层级嵌套数。 - 数组转成属性层级的对象。对象的属性是层级,值是数组,层级里面的值。
1.去重操作(比如:
1_id
相等的话就不再重复添加) 2.提取需要的信息,最终的值和相应父级的信息(之后组装数组的时候放到对应的地方,需要的信息)。 最后输出的对象是这个样子
- 将属性层级的对象转成树状结构数组。 遍历对象,获取层级值。 遍历层级的每个元素。 找到对应的层级将值添加进去,否则递归继续找对应层级。
- HDUOJ-----2838Cow Sorting(组合树状数组)
- HDUOJ---2642Stars(二维树状数组)
- HDUOJ -----Color the ball
- poj-----Ultra-QuickSort(离散化+树状数组)
- HDUOJ---1241Oil Deposits(dfs)
- HDUOJ------2398Savings Account
- HDUOJ-----2399GPA
- HDUOJ----旋转的二进制
- HDUOJ---3743Frosh Week(BIT+离散化)
- Node.js新手必须知道的4个JavaScript概念
- HUDOJ-----1394Minimum Inversion Number
- 提升 Node.js 应用性能的 5 个技巧
- HDUOJ-----1166敌兵布阵
- HDUOJ------2492Ping pong
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Hexo部署远程仓库(Conding、Gitee、Github)
- Linux下安装nginx
- CSS简笔画logo系列:纯CSS绘制“Adidas” Logo
- Electron + Vue跨平台桌面应用开发实战教程(一)
- java_抽象类、接口、多态的使用
- Electron + Vue跨平台桌面应用开发实战教程(二)
- Oracle参数解析(nls_length_semantics)
- 创建单页
- Electron + Vue跨平台桌面应用开发实战教程(三)
- ES6箭头函数中this指向谁?
- 谈谈HTML中锚点及其使用
- java_数据类型转换、运算符
- JavaScript中字符串运算符是什么?有哪些?
- Docker日常使用方式
- 使用Python爬取动态网页-豆瓣电影(JSON)