有个数据结构如下
var obj={
            items: [
            {id:1,menu: {items:[{id: 2},{id: 3}]}},
            {id:4,menu: {items:[{id: 5},{id: 6}]}}
            ]};
items下面有很多元素,都有id属性,和menu属性,menu下面的元素又是items
想给一个id可以获得任意items节点下的元素。function get(obj,id)
{
  if(obj)
  {
    for(var i in obj['items'])
    {
      if(obj['items'][i]['id']==id)
      {
        return obj['items'][i];
      }else{
        return get(obj['items'][i]['menu'],id);
      }
    }
  }else{
    return false;
  }
}
var a=(get(obj,2));
alert(a.id);    //2
var b=(get(obj,3));
alert(b.id);    //undefined写了个函数但是有问题,id为2时可以获得元素,为其他值就不行了,望赐教。thanks

解决方案 »

  1.   

    你的问题出在你只能遍历到第一个元素,因为
    if(obj['items'][i]['id']==id)
      {
      return obj['items'][i];
      }else{
      return get(obj['items'][i]['menu'],id);
      }
    把后面的东西都丢掉了
      

  2.   

    get(obj['items'][i]['menu'],id);
    这里的i有可能是属性名称,有可能是数字
      

  3.   


    function get(obj,id){
    if(obj){
    for(var i in obj['items']){
    if(obj['items'][i]['id']==id){
    return obj['items'][i];
    }else{
    var tmp_result =  get(obj['items'][i]['menu'],id);
    if(tmp_result){
    return tmp_result;
    }
    }
    }
    }
      return false;
    }