// 处理复杂形树状结构:
/**
* params: [] 数据源
* result: [] 存放结果的数组
* key: [] 副本,存放上一次处理结果
* values: [] 副本
*
* 应用场景: 最终是要到最后一层,需要用到每一层的节点的部分数据,最后需要组拼起这部分数据
* 解决思路: 遍历数据源,当遍历的当前项中的数据有children节点,在该节点拷贝一份副本,用个变量保存,
* 用这个变量作为下一轮循环的副本,直到当前项中没有children节点,最后将保存下来的数据存放到 结果数组中
*
*/
function getTree(params = [], result = [], keys = [], values = []) {
if (Array.isArray(params) && params.length) {
params.forEach(item => {
// 每一轮中当你要用到副本的时候,拷贝一份就好了,不要区改变副本,还会用于当前轮其他兄弟使用
let currentKeys = [...keys, item.label]
let currentValues = [...values, item.value]
if (item.children) {
getTree(item.children, result, currentKeys, currentValues)
} else {
result.push({
key: currentKeys.join('/'),
value: currentValues
})
}
})
}
}
const datas = [
{
label: '广东省',
value: '1100',
children: [
{
label: '深圳市',
value: '1110',
children: [
{
label: '福田区',
value: '1111'
},
{
label: '南山区',
value: '1112'
}
]
},
{
label: '广州市',
value: '1200',
children: [
{
label: '天河区',
value: '1201'
},
{
label: '黄埔区',
value: '1202'
}
]
}
]
}
]
let result = []
getTree(datas, result = [], keys = [], values = [])
console.log('源数据', datas)
console.log('处理的结果', result)
js处理复杂形树状结构数据 1
最新推荐文章于 2023-04-15 10:17:38 发布