js使用递归方式将一维数组转换成树形结构数据

递归处理数据将一维数组格式数据转换成树形结构数据

网站开发中,特别是后端模块的开发。树形结构数据是很常见的一种数据格式,本文简要接受如何通过递归方法将一维数组格式的数据转换成树形结构的数据!

效果如图:


效果图完整代码:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<script>
var arr = [{
'id': 1,
'pid': null,
'name': '中国'
},
{
'id': 2,
'pid': 1,
'name': '四川省'
},
{
'id': 3,
'pid': 2,
'name': '成都市'
},
{
'id': 5,
'pid': 2,
'name': '绵阳市'
},
{
'id': 6,
'pid': 2,
'name': '泸州'
},
{
'id': 4,
'pid': 1,
'name': '重庆'
},
]

function treeList(arr, pid) {
var tree = [];
var temp;
for (let i = 0; i < arr.length; i++) {
if (arr[i].pid == pid) {
var obj = arr[i]
temp = treeList(arr, arr[i].id);
if (temp.length > 0) {
obj.subset = temp
}
tree.push(obj)
}
}
return tree;
}
console.log(treeList(arr))
</script>
</body>
</html>

注意点:

从代码中可以看出我们通过treeList(一维数组),就完成了对数据格式的整理。而在我们定义的treeList的方法中我们是传递了两个参数,分别为数组,父级ID。这里为什么我们只传递了数组就能完成数据结构整理呢?

关键点在于大家是否注意到最顶层pid的值为null,这也就是说在调用中我们并非是没有传,而是这个null已经符合了方法中判断条件。

换句更简单的说,如果你的顶级pid不为null(假设为0),那么你的调用应该这么写treeList(arr,0)。


六月初字帖坊小程序 你想要的字帖模板及工具,这里都有!