2013-03-29 280 views
0

我有一個JSON字符串:mootools的嵌套對象過濾

var data = {"categories": 
         [ 
          {"id":1,"parent":0,"name":"Category A","description":"Category description","products":"11","subcategories":[]}, 
          {"id":2,"parent":0,"name":"Category B","description":"Category description","products":"11","subcategories": 
            [ 
             {"id":6,"parent":2,"name":"Subcategory F","description":"Category description", "products":"2","subcategories":[]}, 
             {"id":7,"parent":2,"name":"Subcategory G","description":"Category description","products":"7","subcategories":[]} 
            ] 
          }, 
          {"id":3,"parent":0,"name":"Category C","description":"Category description","products":"4","subcategories": 
            [ 
             {"id":8,"parent":3,"name":"Subcategory H","description":"Category description","products":"8","subcategories":[]} 
            ] 
          }, 
          {"id":4,"parent":0,"name":"Category D","description":"Category description","products":"45","subcategories": 
            [ 
             {"id":9,"parent":4,"name":"Subcategory I","description":"Category description","products":"2","subcategories": 
              [ 
               {"id":10,"parent":9,"name":"Subcategory J","description":"Category description","products":"54","subcategories":[]} 
              ] 
             } 
            ] 
          },{"id":5,"parent":0,"name":"Category E","description":"Category description","products":"89","subcategories":[]} 
         ] 
       }; 

如何通過ID訪問數據? 比如我需要得到這個sub_object使用id = 10:

var requested = request(data, 10); 

function request (data, id) { 

var output = {}; 

...code 

output = {"id":10,"parent":9,"name":"Subcategory J","description":"Category description","products":"54","subcategories":[]} 

return output; 

} 

回答

0

基本上你可以通過一個簡單的遞歸做到這一點:http://jsfiddle.net/99UYU/

var data = {"categories": 
         [ 
          {"id":1,"parent":0,"name":"Category A","description":"Category description","products":"11","subcategories":[]}, 
          {"id":2,"parent":0,"name":"Category B","description":"Category description","products":"11","subcategories": 
            [ 
             {"id":6,"parent":2,"name":"Subcategory F","description":"Category description", "products":"2","subcategories":[]}, 
             {"id":7,"parent":2,"name":"Subcategory G","description":"Category description","products":"7","subcategories":[]} 
            ] 
          }, 
          {"id":3,"parent":0,"name":"Category C","description":"Category description","products":"4","subcategories": 
            [ 
             {"id":8,"parent":3,"name":"Subcategory H","description":"Category description","products":"8","subcategories":[]} 
            ] 
          }, 
          {"id":4,"parent":0,"name":"Category D","description":"Category description","products":"45","subcategories": 
            [ 
             {"id":9,"parent":4,"name":"Subcategory I","description":"Category description","products":"2","subcategories": 
              [ 
               {"id":10,"parent":9,"name":"Subcategory J","description":"Category description","products":"54","subcategories":[]} 
              ] 
             } 
            ] 
          },{"id":5,"parent":0,"name":"Category E","description":"Category description","products":"89","subcategories":[]} 
         ] 
       }; 

function recurseArr(arr,id){ 

    for(var i=0;i<arr.length;i++){ 
     var item = arr[i]; 
     if(item.id == id){ 
      return item; 
     } 
     var subcategories = item.subcategories; 
     var ret_val = recurseArr(subcategories,id); 
     if(ret_val){ 
      return ret_val; 
     } 
    } 

    return null; 
} 


console.log(recurseArr(data.categories,10)); 

但你可以更有效,因爲你保存數據使用ID無論如何 - 這樣反而陣列使用對象(圖):

var data = {"categories": 
        { 
         "1":{"parent":0,"name":"Category A","description":"Category description","products":"11","subcategories":{}}, 
         "2":{"parent":0,"name":"Category B","description":"Category description","products":"11","subcategories":{ 
           "6":{"parent":2,"name":"Subcategory F","description":"Category description", "products":"2","subcategories":{}}, 
           "7":{"parent":2,"name":"Subcategory G","description":"Category description","products":"7","subcategories":{}} 
           } 
         } 
        } 
}; 

那麼你就可以更輕鬆地訪問您的數據。