日期:2014-05-16  浏览次数:20312 次

js线递归问题
本帖最后由 gaowenzhen88 于 2013-06-24 19:28:48 编辑



var arguments=[{
id="001",
name="第一单元1", parentId=""
},{
id="002",
name="第二单元2",
parentId="001"
},{ 
id="003",
name="课程级活动3",
parentId="002"
},

id="004",
name="课程级活动4",
parentId=""
},{ 
id="005",
name="课程级活动5",
parentId=""
}];
//如上是无限级的
//我想遍历出如下面,就是一直找到父级的父级

[{
id="001",
name="第一单元1", parentId=""
},{
id="002",
name="第二单元2",
parentId="001"
},{ 
id="003",
name="课程级活动3",
parentId="002"
}]



------解决方案--------------------
<script>
var arguments=[{
id:"001",
name:"第一单元1", parentid:""
},{
id:"002",
name:"第二单元2",
parentid:"001"
},{ 
id:"003",
name:"课程级活动3",
parentid:"002"
},

id:"004",
name:"课程级活动4",
parentid:""
},{ 
id:"005",
name:"课程级活动5",
parentid:""
}];

var root = {};
//尝试在现有数组中建立一个关系树
for(var i=0;i<arguments.length;i++){
if(arguments[i].parentid=="")
arguments[i].parent = root;
else
arguments[i].parent = getObjById(arguments, arguments[i].parentid);

}

//通过id查找节点
//以下采用遍历算法,如果数据量很大,需要采用其他检索算法提高效率
function getObjById(arguments, id){
for(var i=0;i<arguments.length;i++){
if(arguments[i].id==id)
return arguments[i];
}
}

//建立完关系树后,可以通过子节点 arguments[i].parent.parent.... 很容易的检索到父节点了
alert(arguments[2].id);
alert(arguments[2].parent.id);
alert(arguments[2].parent.parent.id);
//使用 arguments[2].parent == root 可以得知父节点是否是根节点
alert(arguments[2].parent.parent.parent==root);
</script>