2014-09-05 64 views
0

嗯,它可能是有經驗的人。這是我第一次用下劃線。我有這個json。過濾器使用下劃線 - 根和兒童

{ 
    "especiais" : { 
     "text" : { 
      "pt" : "Especiais" 
     }, 
     "active" : true 
    }, 
    "conjuntos" : { 
     "text" : { 
      "pt" : "Conjuntos" 
     }, 
     "active" : true, 
     "subItems" : { 
      "saiaEcamiseta" : { 
       "text" : { 
        "pt" : "Saia e Camiseta" 
       }, 
       "active" : true 
      }, 
      "sandalhas" : { 
       "text" : { 
        "pt" : "Sandalhas" 
       }, 
       "active" : true 
      } 
     } 
    }, 
    "macacoes" : { 
     "text" : { 
      "pt" : "Macacões" 
     }, 
     "active" : true 
    }, 
    "roupasBasicas" : { 
     "text" : { 
      "pt" : "Roupas Básicas" 
     }, 
     "active" : true, 
     "subItems" : { 
      "xortes" : { 
       "text" : { 
        "pt" : "Xortes" 
       }, 
       "active" : true 
      }, 
      "camiseta" : { 
       "text" : { 
        "pt" : "Camisetas" 
       }, 
       "active" : true 
      } 
     } 
    }, 
    "enxoval" : { 
     "text" : { 
      "pt" : "Enxoval" 
     }, 
     "active" : true 
    } 

}

我想只列出itens和子項目的積極根。因此,在上面的例子中,macacoes和他的孩子將不會被列出,並且Xortes(roupasBasicas的孩子)也不會被列出,並且如果可以的話,它包括可能的孫子孫女。

我做了我的第一次嘗試:

result = _und.filter(data.productCategories, function (item) { 
     return item && item.active.indexOf(true) != -1; 
    }); 

,但它不工作:(任何人可以幫助我

+0

macacoes爲什麼不顯示? – dandavis 2014-09-05 22:40:26

+0

,因爲我們需要假定在這個項目中的活動是錯誤的。 – 2014-09-06 23:03:14

回答

0

由於缺乏信譽的,我不能要求澄清,所以我將我最好的刺在哪裏? 。爲你找出答案

var children = []; 

//Get all of the subitems that are active so we can merge with the primary result set 
_.each(data.pt, function(item){ 
    if(item.subItems){ 
    _.each(item.subItems, function(child){ 
     if(child.active) children.push(child); 
    }); 
    } 
}); 

//Gather all active items in the primary result set 
var result = _.filter(data.pt, function(item){ 
    return item.active; 
}); 

//Add each active subItem to our results 
_.each(children, function(child){ 
    result.push(child); 
}); 

這裏是我的理解plunkr: http://plnkr.co/edit/qx6U6ZcmcfhqJxmNulzP?p=preview - 看看在S cript.js,因爲它將提供核心實現。

從我的理解,你想收集所有的「積極」項目在該PT對象的上下文中?

如果是這種情況,我通過鏈接提供的過濾器將會很好,但您仍然可以在父項下方找到這些項目。

如果需要過濾這些數據,您可以簡單地清空將數據附加到對象的字段(如果您願意,可以選擇更聰明的方式)。

_.filter函數似乎最適合這種情況,因爲您可以過濾給定謂詞的數據集。在上述代碼中提供的查詢的第二部分中的函數根據它們是否處於活動狀態來縮小原始數據的範圍。

+0

嘿,馬特!再讀一遍......我的解釋非常糟糕,但無論如何你還是上帝!那麼,這幾乎是100%正確的。您的句子可以隱藏根目錄中active = false的項目,但它必須顯示所有的子項,當然也可以:顯示active = false的子項。 – 2014-09-06 23:01:35

+0

換句話說......這是一個類別樹,我需要隱藏不活動的類別和子類別 - 以進行說明。 ty !!! – 2014-09-06 23:02:31

+0

我想我現在看到你在說什麼。如果您保證子項不會無限期嵌套,那麼更新後的答案可能適用於您。 我也更新了plunk。 – Matt 2014-09-16 18:14:04