假如有这样一个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).多谢各位大侠了!

解决方案 »

  1.   

    1.<script type="text/javascript">
        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]
      

  2.   

    <script>
    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>
      

  3.   

    2.var obj = { 
                "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>