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);