2014-11-21 80 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 
      } 
     } 
    } 

但是这将是很好的构建日期明智的,如果有可能您的实现。