最近一个项目用到这个了,昨晚花了近1个多小时才搞定,着实郁闷,而且还是最原始的递归。
var arr = new Array();//定义顶级的数组,用来保存所有顶级的对象
var arrp = new Array();//定义非顶级的数组,用来保存所有非顶级的对象
for (var i = 0; i < folders.length; i++) {
var id = folders[i].getValue('id');
var name = folders[i].getValue('name');
var parentId = folders[i].getValue('parentid');
//主要的单元对象,包含id,name,和parentid共3个属性。
var o = { 'id': id, 'name': name, 'parentid': parentId };
if (parentId == null)
arr[arr.length] = o;
if (parentId != null) {
if (typeof (arrp[parentId]) != 'object')
arrp[parentId] = new Array();
arrp[parentId][arrp[parentId].length] = o;
}
}
以上代码 主要是生成两个数组,便于后面用来做循环。
下面是递归代码:
GetTree = function(arr, level, arrp) {
var html = '';
var pre = '';
for (var j = 0; j < level; j++) {
pre += '--';
}
for (var i = 0; i < arr.length; i++) {
var o = arr[i];
html += pre + o.name + '<br />';
try {
//在这里判断是否有子节点,如果有,则遍历。
if (arrp[o.id] != 'undefined') {
level++;
html += GetTree(arrp[o.id], level, arrp);
}
} catch (e) { }
}
return html;
}
调用代码:
var html = GetTree(arr, 0, arrp); console.log(html);