2014-04-10 30 views
1

過濾我想所有的值,其中category.id = 1,所以我應該得到2個結果Underscore.js - 在嵌套的Json

我的JSON是這樣的:

var test = [ 
      { 
       "id": 1, 
       "name": "name1", 
       "value": "value1", 
       "category": { 
        "id": 1, 
        "name": "category1" 
       } 
      }, 
      { 
       "id": 2, 
       "name": "name2", 
       "value": "value2", 
       "category": { 
        "id": 1, 
        "name": "category1" 
       } 
      }, 
      { 
       "id": 3, 
       "name": "name3", 
       "value": "value3", 
       "category": { 
        "id": 2, 
        "name": "category2" 
       } 
      } 
     ]; 

我JavaScript的看起來是這樣的:

var x = _.filter(test, 
      function (innerObject) { 
       return _.filter(innerObject, 
        function (category) { 
         return category.id === 1; 
        }); 
      }); 

console.log(x); 

I made a JS Fiddle,但我得到每次都3元回來......不僅是2點正確的!

我也嘗試過類似

var x = _.where(test, {"category":{"id":2}}); 
console.log(x); 

什麼似乎對我來說是合乎邏輯的,但數組始終是空

another jsFiddle

我希望有人能告訴我,我做了什麼錯。 ..
謝謝!

回答

2

那是因爲你正在尋找這是完全一樣{"category":{"id":1}}和你的對象的元素在哪裏{"category":{"id":1,"name":"category1"}}

嘗試

_.filter(test, function(a){ return a.category && a.category.id === 1; }); 
3

這應該工作:

var x = test.filter(function (a) {return a.category.id === 1 }) 
+0

它的工作。 ..但我更喜歡pesta的編碼風格。 但完美將是兩個答案: 'var x = _.filter(test,function(a){return a.category.id === 1});'' – Joerg