2014-11-21 58 views
3

我有一個JS對象像這樣的下劃線JS勇氣嵌套鍵值

var obj = { 
    "2014" : { 
     "11" : { 
      "20" : { 
       "Counts" : { 
        "c" : 2 
       } 
      }, 
      "21" : { 
       "Counts" : { 
        "c" : 20 
       } 
      }, 
      "22" : { 
       "Counts" : { 
        "c" : 20 
       } 
      } 
     } 
    }, 
    "_id" : "53d6883a2dc307560d000004", 
    "createdate" :"2014-11-21T07:15:26.109Z" 
}; 

正如你可以看到這是結構,其中包含一年> - >月 - > day-> counts-> C->值結構 我想挖出白天和計數(C)值出來的

我想是這樣的

_.pluck(obj,'11') 

,但是這是個好uptil僅一個月,對於像天不工作

_pluck(_.pluck(obj,'11'),'20') 
+0

我不明白這一點。你想總結月份===「11」的所有「c」值? – deitch 2014-11-21 09:27:09

+0

我的確切需要是在給定的日期範圍內獲得「c」的所有值,例如找到21和22日期中的所有C – 2014-11-21 09:29:06

回答

14

您可以使用地圖這樣。 Pluck是地圖的精煉版本。

_.map(obj.2014.11, function (item) { 
    return item.Counts.c 
} 

這會給你與嵌入11 所有的C值的數組,但如果我誤解你的意圖,我不會感到驚訝......

+0

這幾乎是我想要的,我們可以將「日期」與值相結合,即項目鍵名本身 – 2014-11-21 09:54:22

+0

done _.map(obj [「2014」] [「11」],function(item,key){return key +「」+ item.Counts.c;}); – 2014-11-21 09:57:41

1

就個人而言,我會創建的數據結構按日期鍵,然後創建的視圖(這看起來很像一個沙發結構)的基礎上他們:

var obj = { 
"2014-11-20" : { 
    "Counts" : { 
     "c" : 2 
    } 
}, 
"2014-11-21" : { 
    "Counts" : { 
     "c" : 20 
    } 
}, 
"2014-11-22" : { 
    "Counts" : { 
     "c" : 20 
    } 
}, 
"_id" : "53d6883a2dc307560d000004", 
"createdate" :"2014-11-21T07:15:26.109Z" 
}; 

但考慮到現有的結構,你可能只是需要做一個降低(實際上是多個):

var allcounts = _.reduce(obj,function(result,item,key) { 
    // key is now "2014", item is the value of {"11":....} 
    _.reduce(item,function(result,item,key) { 
    // key is now "11", item is the value of {"20":....} 
    _.reduce(item,function(result,item,key) { 
     // key is now the date, like "20", item is the value of {"Counts":{"c":2}} 
     result.push(item.Counts.c); 
    },result); 
    },result); 
},[]); 

醜陋,但我不能用這種深度嵌套數據結構的

您可以通過在第一,第二,第三_.reduce()key VAR工作限制範圍想不出更好的辦法。

0

,你可以這樣做:

var obj = { 
       "2014" : { 
        "11" : { 
         "20" : { 
          "Counts" : { 
           "c" : 2 
          } 
         }, 
         "21" : { 
          "Counts" : { 
           "c" : 20 
          } 
         }, 
         "22" : { 
          "Counts" : { 
           "c" : 20 
          } 
         } 
        } 
       }, 
       "_id" : "53d6883a2dc307560d000004", 
       "createdate" :"2014-11-21T07:15:26.109Z" 
      }; 


    for(x in obj){ 
     // console.log(obj[x]); 
     for(y in obj[x]){ 
      for(z in obj[x][y]){ 
     console.log(obj[x][y][z]);// your output here 
      } 
     } 
    } 

但是這將是很好的構建日期明智的,如果有可能您的實現。