递归将列表转换成树形结构、递归将树形结构转换成列表 (javascript)
递归将列表转换成树形结构、递归将树形结构转换成列表 (javascript)
·
递归将列表转换成树形结构、递归将树形结构转换成列表
1.递归将列表转换成树形结构(javascript)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let dataList = [{
label: '陕西省',
index: 0,
id: '陕西省0',
pid: '',
child: []
}, {
label: '西安市',
index: 1,
id: '西安市1',
pid: '陕西省0',
child: []
}, {
label: '雁塔区',
index: 2,
id: '雁塔区2',
pid: '西安市1'
}, {
label: '碑林区',
index: 2,
id: '碑林区2',
pid: '西安市1'
}, {
label: '山西省',
index: 0,
id: '山西省0',
pid: '',
child: []
}, {
label: '太原市',
index: 1,
id: '太原市1',
pid: '山西省0',
child: []
}, {
label: '尖草坪区',
index: 2,
id: '尖草坪区2',
pid: '太原市1'
}]
// 递归将列表转换成树形结构
function listToTreeData(list, rootValue) {
var arr = []
list.forEach(item => {
if (item.pid === rootValue) {
const children = listToTreeData(list, item.id)
if (children.length) {
item.child = children
}
arr.push(item)
}
})
return arr
}
let treeData = listToTreeData(dataList, '') // 调用方法
console.log("treeData", treeData);
let list = [{
label: '陕西省',
index: 0,
id: '陕西省0',
pid: '',
child: [{
label: '西安市',
index: 1,
id: '西安市1',
pid: '陕西省0',
child: [{
label: '雁塔区',
index: 2,
id: '雁塔区2',
pid: '西安市1'
}, {
label: '碑林区',
index: 2,
id: '碑林区2',
pid: '西安市1'
}, ]
}]
}, {
label: '山西省',
index: 0,
id: '山西省0',
pid: '',
child: [{
label: '太原市',
index: 1,
id: '太原市1',
pid: '山西省0',
child: [{
label: '尖草坪区',
index: 2,
id: '尖草坪区2',
pid: '太原市1'
}]
}]
}, ]
</script>
</body>
</html>
2.递归将树形结构转换成列表
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
let list = [{
label: '陕西省',
index: 0,
id: '陕西省0',
pid: '',
child: [{
label: '西安市',
index: 1,
id: '西安市1',
pid: '陕西省0',
child: [{
label: '雁塔区',
index: 2,
id: '雁塔区2',
pid: '西安市1'
}, {
label: '碑林区',
index: 2,
id: '碑林区2',
pid: '西安市1'
}, ]
}]
}, {
label: '山西省',
index: 0,
id: '山西省0',
pid: '',
child: [{
label: '太原市',
index: 1,
id: '太原市1',
pid: '山西省0',
child: [{
label: '尖草坪区',
index: 2,
id: '尖草坪区2',
pid: '太原市1'
}]
}]
}, ]
function flatten(arr) {
return [].concat(...arr.map(item => {
if (item.child) {
let arr = [].concat(item, ...this.flatten(item.child));
delete item.child;
return arr;
}
return [].concat(item);
}));
}
console.log('flatten', flatten(list))
let origin = [{
label: '陕西省',
index: 0,
id: '陕西省0',
pid: ''
}, {
label: '西安市',
index: 1,
id: '西安市1',
pid: '陕西省0'
}, {
label: '雁塔区',
index: 2,
id: '雁塔区2',
pid: '西安市1'
}, {
label: '碑林区',
index: 2,
id: '碑林区2',
pid: '西安市1'
}, {
label: '山西省',
index: 0,
id: '山西省0',
pid: ''
}, {
label: '太原市',
index: 1,
id: '太原市1',
pid: '山西省0'
}, {
label: '尖草坪区',
index: 2,
id: '尖草坪区2',
pid: '太原市1'
}]
</script>
</body>
</html>
更多推荐

所有评论(0)