假如有这样一个Json对象
var jsonObject = {
"A":{},"B":{"SUPERCLASS":"A"},"C":{"SUPERCLASS":"A"},"D":{"SUPERCLASS":"B"},"E":{"SUPERCLASS":"B"},"F":{"SUPERCLASS":"E"}}将其中的"A"-"F"都视作类,而SUPERCLASS则表示的是该类的父类(即B是A的子类,以此类推)。由此jsonObject描述了一个树的结构。现在的问题是如何通过递归实现对树的某一个类,(1)能返回所有的其子类(如输入B,能返回D,E).
(2)能返回所有继承类(如输入B,能返回D,E,F).
(3)能返回所有叶继承类(如输入B,能返回D,F).多谢各位大侠了!
var jsonObject = {
"A":{},"B":{"SUPERCLASS":"A"},"C":{"SUPERCLASS":"A"},"D":{"SUPERCLASS":"B"},"E":{"SUPERCLASS":"B"},"F":{"SUPERCLASS":"E"}}将其中的"A"-"F"都视作类,而SUPERCLASS则表示的是该类的父类(即B是A的子类,以此类推)。由此jsonObject描述了一个树的结构。现在的问题是如何通过递归实现对树的某一个类,(1)能返回所有的其子类(如输入B,能返回D,E).
(2)能返回所有继承类(如输入B,能返回D,E,F).
(3)能返回所有叶继承类(如输入B,能返回D,F).多谢各位大侠了!
var obj = {
"A":{}, "B":{"SUPERCLASS":"A"}, "C":{"SUPERCLASS":"A"},
"D":{"SUPERCLASS":"B"}, "E":{"SUPERCLASS":"B"}, "F":{"SUPERCLASS":"E"} };
function a(elm){
debugger;
var i=0;
var res=[];
for(atr in obj){
var a=obj[atr]["SUPERCLASS"];
if(a==elm){
res[i++]=atr;
}
}
var div=document.getElementById("div");
for(var j=0;j<res.length;j++){
div.innerHTML+=res[j]+"<br />";
}
}
</script>[code=HTML]
<div>
<input id="Button1" type="button" value="button" onclick="a('B')" />
</div>
<div id="div"></div>[/code]
var jsonObject = {
"A":{}, "B":{"SUPERCLASS":"A"}, "C":{"SUPERCLASS":"A"}, "D":{"SUPERCLASS":"B"}, "E":{"SUPERCLASS":"B"}, "F":{"SUPERCLASS":"E"} }
var a = [];
function f1(n) {
for(var i in jsonObject)
if (n == jsonObject[i].SUPERCLASS)
a.push(i);
}
f1("B");
document.write(a + "<br>"); //(1)能返回所有的其子类(如输入B,能返回D,E). a = [];
function f2(n) {
for(var i in jsonObject)
if (n == jsonObject[i].SUPERCLASS) {
a.push(i);
f2(i);
}
}
f2("B");
document.write(a + "<br>"); //(2)能返回所有继承类(如输入B,能返回D,E,F). a = [];
function f3(n) {
var b = true;
for(var i in jsonObject)
if (n == jsonObject[i].SUPERCLASS) {
if (b) {
b = false;
a.push(i);
}
f3(i);
}
}
f3("B");
document.write(a + "<br>"); //(3)能返回所有叶继承类(如输入B,能返回D,F).
</script>
"A":{}, "B":{"SUPERCLASS":"A"}, "C":{"SUPERCLASS":"A"},
"D":{"SUPERCLASS":"B"}, "E":{"SUPERCLASS":"B"}, "F":{"SUPERCLASS":"E"} };
var res=[];
var i=0;
function b(elm){
var k=0;
for(atr in obj){
var par=obj[atr]["SUPERCLASS"];
if(par==elm){
res[i++]=atr;
b(atr);
}
else{
k++;
}
}
if(k<obj.length-1)
return;
}
function setDiv(){
var div=document.getElementById("div");
for(var j=0;j<res.length;j++){
div.innerHTML+=res[j]+"<br />";
}
}
function test(elm){
b(elm);
setDiv();
}<div>
<input id="Button1" type="button" value="button" onclick="test('B')" />
</div>
<div id="div"></div>