js中把ajax获取的数据转化成树状结构(并做成多级联动效果)
1、首先通过ajax获取数据,此处省略,直接贴出获取到的数据格式
var arr = [{ id: 1, name: "一级标题", pid: 0 }, { id: 2, name: "二级标题", pid: 0 }, { id: 3, name: "2.1级标题", pid: 2 }, { id: 4, name: "2.2级标题", pid: 2 }, { id: 5, name: "1.1级标题", pid: 1 }, { id: 6, name: "1.2级标题", pid: 1 }, { id: 7, name: "1.21级标题", pid: 6 }, { id: 8, name: "三级标题", pid: 0 }, { id: 9, name: "1.22级标题", pid: 6 }, { id: 10, name: "1.221级标题", pid: 9 }, { id: 11, name: "1.2211级标题", pid: 10 }, { id: 12, name: "1.2212级标题", pid: 10 }
2.定义函数 proJSON将获取到的数据转化为树状结构
function proJSON(oldArr, pid) { var newArr = []; var self = this; oldArr.map(function(item) { if(item.pid == pid) { var obj = { id: item.id, value: item.name } var childs = self.proJSON(oldArr, item.id); if(childs.length > 0) { obj.childs = childs } newArr.push(obj) } }) return newArr; };
3.调用函数,将原始数据转化为树状结构数据
$(function(){ var testdata = proJSON(arr,0); console.log(testdata); })
此时输出的即为以下格式的树状结构
[{ id: 1, value: "一级标题", }, { id: 2, value: "二级标题", childs:[{ id:3, value:"2.1级标题" }] } ];