数组原型:
[
{"id":2,"pid":0,"name":"\u6559\u80b2\u90e8-\u53cc\u4e00\u6d41-\u5b66\u79d1\u7ec4"},
{"id":1,"pid":0,"name":"\u6559\u80b2\u90e8-\u53cc\u4e00\u6d41-\u6821\u672c\u90e8"},
{"id":3,"pid":1,"name":"A00"},
{"id":14,"pid":2,"name":"A01"},
{"id":4,"pid":1,"name":"A01"},
{"id":5,"pid":1,"name":"A02"},
{"id":15,"pid":2,"name":"A02"},
{"id":6,"pid":1,"name":"A03"},
{"id":16,"pid":2,"name":"A03"},
{"id":7,"pid":1,"name":"A04"},
{"id":17,"pid":2,"name":"A04"},
{"id":18,"pid":2,"name":"A05"},
{"id":8,"pid":1,"name":"A05"},
{"id":9,"pid":1,"name":"A06"},
{"id":10,"pid":1,"name":"A07"},
{"id":11,"pid":1,"name":"A08"},
{"id":12,"pid":1,"name":"A09"},
{"id":13,"pid":1,"name":"A10"}]
js
function createMenu(jsonData, pid) {
function deepCopy(arr) {
return JSON.parse(JSON.stringify(arr));
}
function arr2tree(arr, father) {
// 遍历数组,找到当前father的所有子节点
var pid = typeof(father.id) != "undefined" ? father.id : 0;
for (var i = 0; i < arr.length; i++) {
if (arr[i].pid == pid) {
// 这里是有子节点才需要有node属性(也就是说有node里绝不会为空list)
if (!father.childs) {
father.childs = [];
}
var son = arr[i];
father.childs.push(son);
arr.splice(i, 1); // 删除该节点,当list为空的时候就终止递归
i--; // 由于删除了i节点,所以下次访问的元素下标应该还是i
}
}
// 再对每一个子节点进行如上操作
if (father.childs) { // 需要先判断有没有子节点
var childs = father.childs;
for (var i=0; i<childs.length; i++) {
arr2tree(arr, childs[i]); // 调用递归函数
}
// 用于按名称进行排序,如果不强调顺序可以去掉
father.childs.sort(function (a, b) {
return a.name > b.name;
})
}
}
var data = {id: 0}, arr = deepCopy(jsonData); // 拷贝一份,避免对原数组进行修改
arr2tree(arr ,data);
var ul = '<div class="cd-dropdown-wrapper">';
}
网友评论