Javascript的递归,如何改进?

最近一个项目用到这个了,昨晚花了近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);
 
posted @ 2011-03-03 17:05  无尽思绪  阅读(1496)  评论(2编辑  收藏  举报