2011-11-14 19 views
1

我知道有很多類似的問題,但沒有人相同。 我有一個相當複雜的JSON樹:通過json樹中的參數值刪除元素

"items": [ 
    { 
    "slug": "level_1", 
    "items": [ 
     { 
     "slug": "level_1_1" 
     }, 
     { 
     "slug": "level_1_2", 
     "items": [ 
      { 
      "slug": "level_1_2_1", 
      }, 
      { 
      "slug": "level_1_2_2" 
      } 
     ] 
     } 
    ]}, 
    { 
    "slug": "level_2" 
    } 
] 

我需要有一個功能刪除/由「彈頭」的值刪除JSON元素。可能嗎? 我嘗試了一切,我發現沒有成功。我可以使用JavaScript/jQuery。

回答

2

遞歸處理樹:您想要一個包含遞歸處理元素的列表,對於每個元素,不是都有匹配的「slug」值。遞歸處理由創建一個新對象組成,原始的slug和通過遞歸調用該函數過濾的'items'列表。

喜歡的東西:

function my_filter(json_array, slug_to_remove) { 
    return $.map(json_array, function(element) { 
     return (element.slug == slug_to_remove) ? null : { 
      slug: element.slug, items: my_filter(element.items, slug_to_remove) 
     }; 
    }); 
} 
+0

卡爾·您好!你爲我的dicover $ .map!謝謝!事實上,你的解決方案有一個錯誤。如果子節點中的'項目'將爲空異常發生。我更新您的解決方案: 功能my_filter(json_array,slug_to_remove){ 回報$ .MAP(json_array,函數(元素){ 回報(element.slug == slug_to_remove)空:{ 毛坯:元素。蛞蝓,項目:(element.items == NULL)element.pages: my_filter(element.items,slug_to_remove) }; });? } – verywell

+0

我不知道你的數據中有一個'element.pages',但我很高興你能夠使它工作:) –

+0

哦對不起,我在實際項目中使用「頁面」而不是「項目」。這是一句話。 =) – verywell