function print(arr){
    for(var i = 0,o;o=arr[i];i++){
        o.children && print(o.children);
    }
}
 
var aa = [
        {name:'BBB',age:141,children:[{name:'bbb1',age:15},{name:'bbb2',age:19}]},
{name:'C1+',desc:'1',age:131,children:[{name:'c2+',desc:'1',age:15,children:[{name:'c3+',desc:'1',age:11}]},{name:'C2+',desc:'1',age:15,children:[{name:'C3+',desc:'1',age:10}]}]}
];print(aa)问题:获取age==10的对应的所有父集的name拼接的方法(例:C1+C2+C3这条信息是age==10对应的父集信息)

解决方案 »

  1.   


    Array.prototype.remove = function(val) {
    var index = this.indexOf(val);
    if (index > -1) {
    this.splice(index, 1);
    }
    };
    function getNames(array,childs,age){
    for(var i=0;i<array.length;i++)
    {
    var item=array[i];
    if(item.age==age){
    childs.push(item);
    return childs;
    }
    if(item.children&&item.children.length>0){
    childs.push(item);
    var rs=getNames(item.children,childs,age);
    if(rs){
    return rs;
    }
    else{
    childs.remove(item);
    }
    }
    }
    return false;
    }
    var aa = [
            {name:'BBB',age:141,children:[{name:'bbb1',age:15},{name:'bbb2',age:19}]},
    {name:'C1+',desc:'1',age:131,children:[{name:'c2+',desc:'1',age:15,children:[{name:'c3+',desc:'1',age:11}]},{name:'C2+',desc:'1',age:15,children:[{name:'C3+',desc:'1',age:10}]}]}
    ];
    var result=getNames(aa,[],10);
    var str="";
    for(var i=0;i<result.length;i++){
    str+=result[i].name;
    }
    alert(str);
      

  2.   

    @hjywyj 你好,首先非常感谢你的回答,我还想接着问一下就是如果最后一个age可能重复,
    var aa = [
            {name:'BBB',age:141,children:[{name:'bbb1',age:15},{name:'bbb2',age:19}]},
    {name:'A1+',desc:'1',age:131,children:[{name:'a2+',desc:'1',age:1311,children:[{name:'a3+',desc:'1',age:11}]},{name:'A2+',desc:'1',age:15,children:[{name:'A3+',desc:'1',age:10}]}]},
    {name:'C1+',desc:'1',age:132,children:[{name:'c2+',desc:'1',age:153,children:[{name:'c3+',desc:'1',age:111}]},{name:'C2+',desc:'1',age:151,children:[{name:'C3+',desc:'1',age:10}]}]}
    ];
    需要匹配    15.10   (15代表10前面的age值,10代表后面的age值),需要怎么改造,谢谢
      

  3.   


    Array.prototype.remove = function(val) {
    var index = this.indexOf(val);
    if (index > -1) {
    this.splice(index, 1);
    }
    };
    function getNames(array,childs,age,results){
        for(var i=0;i<array.length;i++)
        {
            var item=array[i];
            if(item.age==age){
                childs.push(item);
    results.push([].concat(childs));
    childs.remove(item);
            }
            if(item.children&&item.children.length>0){           
                childs.push(item);
                getNames(item.children,childs,age,results);
                childs.remove(item);
            }
        }
        return false;
    }
    var aa = [
            {name:'BBB',age:141,children:[{name:'bbb1',age:15},{name:'bbb2',age:19}]},
    {name:'A1+',desc:'1',age:131,children:[{name:'a2+',desc:'1',age:1311,children:[{name:'a3+',desc:'1',age:11}]},{name:'A2+',desc:'1',age:15,children:[{name:'A3+',desc:'1',age:10}]}]},
    {name:'C1+',desc:'1',age:132,children:[{name:'c2+',desc:'1',age:153,children:[{name:'c3+',desc:'1',age:111}]},{name:'C2+',desc:'1',age:151,children:[{name:'C3+',desc:'1',age:10}]}]}
    ];
    var results=[];
    getNames(aa,[],10,results);
    console.log(results);//这是那两组数,自己遍历筛选需要的就行了
      

  4.   

    好的,谢谢,你说的这个我把结果拿过来再遍历是ok的,不过考虑通用性,可能这个拼接的   15.10   (15代表10前面的age值,10代表后面的age值),可能会出现1311.15.10这样的拼接去匹配,能不能有更好的匹配方式,非常感谢!
      

  5.   

    @骑着蜗牛去爬山  好的,谢谢,你说的这个我把结果拿过来再遍历是ok的,不过考虑通用性,可能这个拼接的   15.10   (15代表10前面的age值,10代表后面的age值),可能会出现1311.15.10这样的拼接去匹配,能不能有更好的匹配方式,非常感谢!