2012-06-22 69 views
2

多個記錄ID下面鏈接的參考:篩選分級JSON數據與jQuery的

https://stackoverflow.com/posts/4391119/revisions

Filter JSON Data with multiple record IDs in jQuery

如果有什麼是JSON一個層次數據。我已經試過做修改在那個filterStore函數中,但沒有成功。你能幫助我嗎?

當前filterStore是這樣的:

var filter = { 
    "brand_id": [1,2,3], 
    "productname": new RegExp('(.*?)', 'gi'), 
    "price": new RegExp('.*?', 'gi') 
}; 

function filterStore(dataStore, filter) { 
    return $(dataStore).filter(function(index, item) { 
     for(var i in filter) { 
      if(filter[i] instanceof Array){ 
       if($.inArray(parseInt(item[i],10),filter[i]) == -1) 
       return null; 
       else 
       continue;     
      } 
      if(! item[i].toString().match(filter[i])) return null; 
     } 
     return item; 
    }); 
} 

但JSON響應是這樣的:

[ 
    { 
     "brandInfo": { 
      "brand": "Lg", 
      "productname": "Microwave", 
     }, 
     "prodInfo": { 
      "size": "1.5 ltr", 
      "price": 200, 
      "color": "black" 
     }, 
     "Category": "Electronic", 
     "shop": "Walmart" 
    } 
    { 
     "brandInfo": { 
      "brand": "Samsung", 
      "productname": "Microwave", 
     }, 
     "prodInfo": { 
      "size": "1.5 ltr", 
      "price": 250, 
      "color": "Ivory" 
     }, 
     "Category": "Electronic", 
     "shop": "Walmart" 
    } 
    { 
     "brandInfo": { 
      "brand": "Toshiba", 
      "productname": "Microwave", 
     }, 
     "prodInfo": { 
      "size": "1.6 ltr", 
      "price": 310, 
      "color": "Silver" 
     }, 
     "Category": "Electronic", 
     "shop": "Walmart" 
    } 
    { 
     "brandInfo": { 
      "brand": "Hitachi", 
      "productname": "Microwave", 
     }, 
     "prodInfo": { 
      "size": "1.5 ltr", 
      "price": 280, 
      "color": "black" 
     }, 
     "Category": "Electronic", 
     "shop": "Walmart" 
    } 
] 

喜悅,你能不能幫我要像這樣的分層數據集中的過濾器?新功能filterStore?

+0

使用jLinq ..使數據對象成爲一個夢 – ppumkin

回答

0

首先重寫過濾器以反映嵌套結構。

var filter = { 
    "brandInfo": { 
     "brand_id": [1,2,3] 
    }, 
    "prodInfo": { 
     "productname": new RegExp('(.*?)', 'gi'), 
     "price": new RegExp('.*?', 'gi') 
    } 
}; 

現在可以寫入過濾器這樣的代碼(只是通過外性能如brandInfo加入嵌套循環來循環)。

function filterStore(dataStore, filter) { 
    return $(dataStore).filter(function(index, item) { 
     for(var prop in filter) { 
      if (item[prop] == null) return null; 
      for(var i in prop) { 
       if (item[prop][i] == null) return null; 
       if(filter[prop][i] instanceof Array){ 
        if($.inArray(parseInt(item[prop][i],10),filter[prop][i]) == -1) return null; 
        else continue; 
       } 
       if(! item[prop][i].toString().match(filter[prop][i])) return null; 
      } 
     } 
     return item; 
    }); 
} 

這應該和你的例子中的數據結構一樣。但請記住,此代碼假定您的篩選器僅包含第二級嵌套屬性。對於過濾嵌套屬性的更一般的解決方案,您需要將過濾器邏輯放在一個單獨的函數中,並遞歸使用它。